Python:OSError:[Errno 2]没有这样的文件或目录:''

时间:2013-03-31 01:04:57

标签: python python-2.7 python-module

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

我应该如何阅读此错误以及该怎么做?

4 个答案:

答案 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