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

Hug*_*lpz 18 python python-module python-2.7

我有一个100行,3岁的python刮刀,现在有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!)
Run Code Online (Sandbox Code Playgroud)

跑步时

$cd /my/folder/
$python script.py
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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: ''
Run Code Online (Sandbox Code Playgroud)

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

zig*_*igg 31

您是否注意到,如果您跑步,则不会收到错误

python ./script.py
Run Code Online (Sandbox Code Playgroud)

代替

python script.py
Run Code Online (Sandbox Code Playgroud)

这是因为sys.argv[0]./script.py在前一种情况下阅读,它提供了os.path.dirname一些工作.如果未指定路径,sys.argv[0]则只读取script.py,并且os.path.dirname无法确定路径.


Moe*_*ius 21

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

import shlex, subprocess
command_line = "ls -a"
args = shlex.split(command_line)
p = subprocess.Popen(args)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.它在python 2.7中是必要的,但在python 3中不再存在 (2认同)

Mar*_*ers 19

用途os.path.abspath():

os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
Run Code Online (Sandbox Code Playgroud)

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

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