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

Posted

技术标签:

【中文标题】Python:OSError:[Errno 2]没有这样的文件或目录:\'\'【英文标题】:Python: OSError: [Errno 2] No such file or directory: ''Python:OSError:[Errno 2]没有这样的文件或目录:'' 【发布时间】:2013-03-21 10:55:00 【问题描述】:

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

我应该如何阅读此错误以及如何处理?

【问题讨论】:

【参考方案1】:

使用os.path.abspath():

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

sys.argv[0] 在您的情况下 只是 一个脚本名称,没有目录,所以 os.path.dirname() 返回一个空字符串。

os.path.abspath() 将其转换为带有目录名称的正确绝对路径。

【讨论】:

可能会恢复一个旧线程,但我想补充一点,这个答案非常有趣。我在同一个文件夹中有两个脚本,相同的权限,都使用 argparse 并且可以通过 CLI 执行。一个没有出现任何问题,但另一个给出了相同的错误No such file or directory。如果我使用您的解决方案,我可以使用python foo.py 运行有问题的脚本,但不能从./foo.py 运行。我很好奇为什么会这样 @KamikazeRusher:我也会,但没有更多细节我无法帮助你。也许将其作为一个新问题发布? 无论如何,我认为我无法提供更多细节。感谢您的回复,但是我认为这件事暂时是微不足道的,还不能保证自己的问题。我只是发现有趣的是,即使在相同的情况下,您仍然可以发现这样的不一致 @KamikazeRusher:如果您得到明显不一致的结果,我会质疑情况是否相同。 有些东西在这两种情况下是不同的!【参考方案2】:

你有没有注意到运行时不会报错

python ./script.py

而不是

python script.py

这是因为在前一种情况下sys.argv[0] 将读取./script.py,这使os.path.dirname 可以使用。不指定路径时,sys.argv[0] 仅读取为script.py,而os.path.dirname 无法确定路径。

【讨论】:

【参考方案3】:

我遇到了这个错误,因为我向subprocess.call 提供了一个参数字符串,而不是一个参数数组。为防止这种情况,请使用shlex.split:

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

【讨论】:

谢谢。在 python 2.7 中是必需的,但在 python 3 中不再需要 我遇到了同样的错误,但我尝试使用 shlex.split 并将数组传递给 subprocess.popen。我想要做的是切换到新目录并在linux中的新shell。 command_to_run=shlex.split("cd .. && cd Adapter_Main && python2 client.py") subprocess.Popen(command_to_run,stdout=subprocess.PIPE) 这一切都在 python2 中,我得到了操作系统错误。没有这样的文件或目录。我已经在普通 shell 中检查了该命令,并且该命令完全正常工作。【参考方案4】:

我在Ubuntu 14.04上编译android代码v4.4的时候遇到了同样的Python问题,没有这样的文件或目录。

它在我安装在库下面时结束。所以我认为它可能会在某些情况下对某人有所帮助。 python脚本认为系统中存在一些lib是理所当然的。

sudo apt install gperf
sudo apt install  libxml2-utils
sudo apt install libbison-dev

【讨论】:

您的具体用例和错误与这里介绍的无关......为了解决这个问题需要安装外部库是没有意义的......请参阅接受的答案看看这里有什么问题......

以上是关于Python:OSError:[Errno 2]没有这样的文件或目录:''的主要内容,如果未能解决你的问题,请参考以下文章

在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’

OSError:[Errno 2]在Django中使用python子进程时没有这样的文件或目录

用于 Traceroute 并在文件中打印输出的 Python 脚本在 Linux Mint 中显示错误(OSError: [Errno 2] No such file or directory)

OSError: [Errno 5] Raspberry PI GPS shield Python 上的输入/输出错误

Python创建文件报错OSError:[Errno 22] Invalid argument处理

python-serial OSError: [Errno 11] 资源暂时不可用