22

私は100行、3年前のpythonスクレーパーを持っていますが、今はバグです。開始行は次のとおりです。

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

次のエラーが表示されます。

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: ''

このエラーの読み方と対処法を教えてください。

4

4 に答える 4

35

実行してもエラーが発生しないことに気づきましたか

python ./script.py

それ以外の

python script.py

これは、前者の場合にsys.argv[0]will が読み取られ、何かを処理できるためです。パスを指定しない場合は、単にを読み取り、パスを特定できません。./script.pyos.path.dirnamesys.argv[0]script.pyos.path.dirname

于 2013-03-31T01:19:02.723 に答える
30

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

import shlex, subprocess
command_line = "ls -a"
args = shlex.split(command_line)
p = subprocess.Popen(args)
于 2015-04-21T14:26:58.523 に答える
20

使用os.path.abspath():

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

sys.argv[0]あなたの場合はスクリプト名であり、ディレクトリではないためos.path.dirname()、空の文字列を返します。

os.path.abspath()ディレクトリ名を含む適切な絶対パスに変換します。

于 2013-03-31T01:17:34.977 に答える