2013-03-31 17 views
13

私は100行、3年前のpythonスクレーパーを持っています。始まる行は以下のとおりです。私はこのエラーを読まなければならないし、何をすべきかをどのように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

おそらく古いスレッドを復活させるかもしれませんが、私はこの答えは非常に興味深いと付け加えたいと思います。同じフォルダに2つのスクリプトがあり、同じアクセス権があり、両方とも 'argparse'を使い、CLI経由で実行可能です。 1つは問題を示さないが、もう1つは 'No such file or directory'という同じエラーを出す。私があなたのソリューションを使用している場合は、 'python foo.py'を使って問題のあるスクリプトをうまく実行できますが、'。/ foo.py'では実行できません。私はなぜこれが –

+0

@ KamikazeRusherであるかについて非常に興味があります:私もそうですが、それ以上の詳細がなければ私はあなたを助けることができません。おそらくそれを新しい質問として投稿しますか? –

11

引数の配列の代わりにsubprocess.callに引数の文字列を指定していたため、このエラーが発生しました。これを防ぐには、shlex.split

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

ありがとう。それはPython 2.7で必要ですが、Python 3ではもうありません –

関連する問題