8

由于无法避免的原因,我使用 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
>>> 
4

1 回答 1

19

尝试设置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是命令解释器cmd.exeGet-ChildItemPowerShell 中的 cmdlet 的一项功能(别名为dir)。

于 2013-10-08T20:44:03.407 回答