我有100行,3岁的python scraper,现在有bug。起跑线是:
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: ''
我应该如何阅读此错误以及该怎么做?
答案 0 :(得分:30)
您是否注意到,如果您运行
,则不会收到错误消息python ./script.py
而不是
python script.py
这是因为sys.argv[0]
会在前一种情况下读取./script.py
,这样可以使用os.path.dirname
。如果您未指定路径,sys.argv[0]
只会读取script.py
,而os.path.dirname
无法确定路径。
答案 1 :(得分:20)
我遇到了这个错误,因为我向subprocess.call
提供了一串参数而不是参数数组。要防止这种情况发生,请使用shlex.split
:
import shlex, subprocess
command_line = "ls -a"
args = shlex.split(command_line)
p = subprocess.Popen(args)
答案 2 :(得分:19)
使用os.path.abspath()
:
os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
在您的情况下, sys.argv[0]
只是一个脚本名称,没有目录,因此os.path.dirname()
返回一个空字符串。
os.path.abspath()
将其转换为具有目录名称的正确绝对路径。
答案 3 :(得分:-1)
我在Ubuntu 14.04上编译android代码v4.4,遇到同样的Python问题,没有那个文件或目录。
它在我安装在库下面时结束。所以我认为它可能会在某些情况下帮助某人。 python 脚本认为系统中存在一些库是理所当然的。
sudo apt install gperf
sudo apt install libxml2-utils
sudo apt install libbison-dev