2013-03-31 85 views
13

我有一個100行,3歲的蟒蛇刮刀,現在的錯誤。啓動線路有:Python:OSError:[Errno 2]沒有這樣的文件或目錄:''

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

我應該怎樣讀這個錯誤,做些什麼?

回答

27

你是否注意到你,如果你運行

python ./script.py 

,而不是

python script.py 

這是因爲sys.argv[0]將在前者的情況下,這給os.path.dirname東西讀./script.py沒有得到錯誤跟...共事。當您不指定路徑時,sys.argv[0]只會讀取script.py,並且os.path.dirname無法確定路徑。

+2

我確實得到了錯誤。 – MontyPython

18

使用os.path.abspath()

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

sys.argv[0]你的情況是只是腳本名稱,沒有目錄,所以os.path.dirname()返回一個空字符串。

os.path.abspath()將其轉換爲具有目錄名稱的正確絕對路徑。

+0

工程!感謝你們倆! – Hugolpz

+0

大概重振舊線程,但我想補充說這個答案非常有趣。我在同一個文件夾中有兩個腳本,權限相同,都使用'argparse',並且可以通過CLI執行。一個不顯示任何問題,但另一個給出'沒有這樣的文件或目錄'相同的錯誤。如果我使用你的解決方案,我可以使用'python foo.py'運行有問題的腳本,但不能從'。/ foo.py'運行。我很好奇,爲什麼這是 –

+0

@KamikazeRusher:我也是,但沒有進一步的細節,我無法幫到你。也許把這作爲一個新問題發佈? –

11

我有這個錯誤,因爲我提供了一個參數字符串subprocess.call而不是一個參數數組。爲防止出現這種情況,請使用shlex.split

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

謝謝。它在Python 2.7中是必需的,但在python 3中不再有用 –

相關問題