2013-10-08 58 views
4

我使用Python 2.6的原因是我無法避免的。我在Idle命令行上運行了下面的一小段代碼,並得到一個我不明白的錯誤。我怎樣才能解決這個問題?子進程在Python中不工作

>>> import subprocess 
>>> x = subprocess.call(["dir"]) 

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    x = subprocess.call(["dir"]) 
    File "C:\Python26\lib\subprocess.py", line 444, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "C:\Python26\lib\subprocess.py", line 595, in __init__ 
    errread, errwrite) 
    File "C:\Python26\lib\subprocess.py", line 821, in _execute_child 
    startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 
>>> 
+1

在您的Windows命令提示符下直接鍵入'dir'命令是否工作? (因爲它應該) –

+0

適用於我的python2,7和3.3。它必須是系統設置問題 –

+0

是的,目錄工程,它也適用於os.popen – user442920

回答

11

嘗試設置shell=True

subprocess.call(["dir"], shell=True) 

dir是一個shell程序意味着沒有可執行文件,你可以調用。所以dir只能從shell調用,因此shell=True

請注意,subprocess.call將只執行該命令,而不會給你它的輸出。它只會返回它的退出狀態(成功時通常爲0)。

如果你想要得到的輸出,你可以使用subprocess.check_output

>>> subprocess.check_output(['dir'], shell=True) 
' Datentr\x84ger in Laufwerk C: ist … and more German output' 

要解釋爲什麼它適用於Unix的:有,dir實際上是一個可執行文件,通常放在/bin/dir,並作爲這些可從PATH訪問。在Windows中,dir是PowerShell中的命令解釋程序cmd.exeGet-ChildItem cmdlet的功能(別名爲dir)。

+1

嗨,謝謝,這個伎倆。 – user442920

+0

@ user442920然後接受答案 –

相關問題