子进程在Python中不起作用

时间:2013-10-08 20:39:35

标签: python subprocess

我使用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
>>> 

1 个答案:

答案 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.exeGet-ChildItem cmdlet的一项功能(别名为dir)。