2013-03-31 1 views
13

저는 100 줄 3 년 된 파이썬 스크레이퍼를 가지고 있습니다. 시작 라인은 :이 오류를 읽어야하고 무엇을 어떻게Python : OSError : [Errno 2] 해당 파일이나 디렉토리가 없습니다. ''

python script.py 
Traceback (most recent call last): 
    File "script.py", line 2, in <module> 
    os.chdir(os.path.dirname(sys.argv[0])) 
OSError: [Errno 2] No such file or directory: '' 

:

import urllib, re, os, sys, time # line 1: import modules 
os.chdir(os.path.dirname(sys.argv[0])) # line 2: all works in script's folder > relative address 
# (rest of my script here!) 

실행

$cd /my/folder/ 
$python script.py 

내가 오류가 발생?

답변

27

당신은 당신이

python ./script.py 

대신

python script.py 

sys.argv[0]os.path.dirname 뭔가를주는 전자의 경우에 ./script.py을 읽을 수 있기 때문입니다을 실행할 경우이 오류가 발생하지 않는 것으로 나타났습니다 함께 일해. 경로를 지정하지 않으면 sys.argv[0]은 간단히 script.py으로 표시되며 os.path.dirname은 경로를 결정할 수 없습니다.

+2

오류가 계속 발생합니다. – MontyPython

18

사용 os.path.abspath() : 귀하의 경우

os.chdir(os.path.dirname(os.path.abspath(sys.argv[0]))) 

sys.argv[0]이다는 스크립트 이름, 어떤 디렉토리, 그래서 os.path.dirname()는 빈 문자열을 반환하지 않습니다.

은 디렉토리 이름을 사용하여 적절한 절대 경로로 변환합니다.

+0

Works! 두 분 덕분에! – Hugolpz

+0

아마도 오래된 스레드를 되살리는 것 같지만,이 대답은 매우 흥미 롭다고 덧붙이고 싶습니다. 나는 동일한 폴더에 두 개의 스크립트를 가지고 있는데, 같은 사용 권한은'argparse'를 사용하고 CLI를 통해 실행 가능합니다. 하나는 어떤 문제도 보이지 않지만 다른 하나는'No such file or directory'라는 동일한 오류를줍니다. 귀하의 솔루션을 사용하는 경우 'python foo.py'를 사용하여 문제가되는 스크립트를 올바르게 실행할 수는 있지만'./foo.py '는 실행할 수 없습니다. 나는 이것이 왜 이상한 지 궁금합니다. –

+0

@ 카미 카즈 루셔 : 나도 그래,하지만 더 이상의 세부 사항없이 나는 거기서 도울 수 없다. 아마도 새로운 질문으로 게시 하시겠습니까? –

11

인수 배열 대신 subprocess.call에 인수 문자열을 제공했기 때문에이 오류가 발생했습니다. 이를 방지하려면 shlex.split :

import shlex, subprocess 
command_line = "ls -a" 
args = shlex.split(command_line) 
p = subprocess.Popen(args) 
+1

감사합니다. 파이썬 2.7에서는 필요하지만 파이썬 3에서는 더 이상 필요하지 않습니다. –