2014-05-24 2 views
1

우분투 12.04에서 셸 스크립트를 사용하여 파이썬 파일을 실행하려고합니다. 이 일을 위해, 나뿐만 아니라 다른 실수가 있다면 그래서 내가 참아주세요, I, 스크립트에 새로운 오전 link셸 스크립트를 사용하여 디렉토리의 파일을 반복합니다. 우분투

 #!/bin/bash 

    file_path=/home/itachi/LN_project/cover_image 

    for f in $file_path 
    do 
      python Question2_lsbreplacement_encode.py $f message_2.txt 0.7 
    done 

의 도움으로, 다음과 같은 코드가 있습니다. 입력을 환영합니다. 다음과 같은 오류가 발생합니다.

 Traceback (most recent call last): 
    File "Question2_lsbreplacement_encode.py", line 26, in <module> 
    img = Image.open(imgname) # reading image 
    File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1955, in open 
    fp = __builtin__.open(fp, "rb") 
    IOError: [Errno 21] Is a directory: '/home/itachi/LN_project/cover_image' 

기본적으로 나는 경로를 명시 적으로 언급하고 싶지 않습니다. 폴더 이름과 현재 작업 디렉토리를 연결하고 싶습니다. 내가 어떻게 할 수 있는지 말해 줄 수 있니?

+2

항상 파일 이름을 따옴표로 묶어야합니다. 즉, $ f 대신 "$ f"를 사용하는 것이 좋습니다. –

+0

감사합니다 @MichaWiedenmann. 하지만 여전히 같은 오류가 발생합니다. 위와 같이 작은 따옴표로 표시합니다. –

+1

cover_image/*에서 f와 같이 루프를 사용해야합니다. do ... "$ f"...; 다. 그게 당신이 요구하는 것 같아요 (그리고 기계를 통해 휴대용입니다). –

답변

4

이 작업을 시도해야한다 : 여기에서

#!/bin/bash 

file_path=/home/itachi/LN_project/cover_image 

for f in $file_path/* 
do 
     python Question2_lsbreplacement_encode.py $f message_2.txt 0.7 
done 

: 다음

export MYDIR="/path/to/local/top/level/dir" 

과 : How to get the list of files in a directory in a shell script?

이 시스템 독립, 각 기계의 .bashrc에이를 추가 할 수 있습니다하려면 귀하의 코드는 다음과 같습니다 :

PWD를 사용하여 0

또는 대안 :

#!/bin/bash 

cwd=$(pwd) 
file_path=$cwd/cover_image 
for f in $file_path/* 
do 
     python Question2_lsbreplacement_encode.py $f message_2.txt 0.7 
done 
+0

고마워요 @ rofls. 현재 디렉토리와 경로를 어떻게 연결할 수 있는지 말해 주시겠습니까? 에서처럼, pwd + cover_image /. 코드가 시스템 독립적이어야합니다. –

+1

현재 디렉토리 란 무엇입니까? 위의 코드는'message_2.txt'와'0.7'이 디렉토리에 의존하지 않는 한 현재 디렉토리와 독립적입니다. 상대 이름을 사용하려면'cd "$ {file_path #/*}"; cover_image에있는 f에 대해서/*; ...; 다. –

+0

@JonathanLeffler, 내가하는 일보다 더 쉬울까요? 더 쉬워 보입니다. – rofls

1

$file_path는 단일 경로 ... 디렉토리의 일치합니다. 대신 디렉토리의 내용과 일치 시키려면

file_path=/home/itachi/LN_project/cover_image/* 

과 같은 것을 사용하려고합니다.

관련 문제