Подтвердить что ты не робот

Python: OSError: [Errno 2] Нет такого файла или каталога: ''

У меня есть 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 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: ''

Как читать эту ошибку и что делать?

4b9b3361

Ответ 1

Заметили ли вы, что вы не получили ошибку, если вы запустите

python ./script.py

вместо

python script.py

Это потому, что sys.argv[0] будет читать ./script.py в первом случае, что дает os.path.dirname что-то для работы. Когда вы не укажете путь, sys.argv[0] просто читает script.py, а os.path.dirname не может определить путь.

Ответ 2

Используйте os.path.abspath():

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

sys.argv[0] в вашем случае это просто имя script, не каталог, поэтому os.path.dirname() возвращает пустую строку.

os.path.abspath() превращает это в правильный абсолютный путь с именем каталога.

Ответ 3

У меня была эта ошибка, потому что я предоставлял строку аргументов subprocess.call вместо массива аргументов. Чтобы предотвратить это, используйте shlex.split:

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