我使用Python 2.6是出于无法避免的原因。我在Idle命令行上运行了以下一小段代码,并且遇到了一个我不明白的错误。我怎么能绕过这个?
>>> 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
>>>
答案 0 :(得分:13)
尝试设置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.exe
或Get-ChildItem
cmdlet的一项功能(别名为dir
)。