在Windows上使用Python 2.7.2中的subprocess.call()时遇到的问题

时间:2012-03-02 10:26:06

标签: python python-2.7

我正在尝试以下操作,但失败并出现错误。我试图通过在控制台上调用python从Python shell /从脚本/ Windows控制台上运行它。似乎没什么用。总是一样的错误。

from subprocess import call
>>>pat = "d:\info2.txt"

>>> call(["type",pat])

>>>Traceback (most recent call last):
  File "<pyshell#56>", line 1, in <module>
    call(["type",pat])
  File "C:\Python27\lib\subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 679, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 893, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

有谁知道这里有什么问题。!! ???

即使是没有任何争论的简单call(["date"]]也会因同样的错误而失败。

我正在使用: Windows 7机器上的Python 2.72 32位版本。

4 个答案:

答案 0 :(得分:19)

shell=True添加到call

>>> import subprocess
>>> subprocess.call('dir', shell=True)
0

如您所见,它给出了返回代码的值,而不是dir的输出。此外,它等待命令完成,所以

>>> subprocess.call('date', shell=True)

会等你输入新的日期。

编辑:如果要捕获输出,请使用subprocess.check_output。例如,DOS命令type打印出文件的内容。因此,假设您的文件info2.txt包含您的用户名,您可以这样做:

>>> import subprocess
>>> path = r'd:\info2.txt'
>>> output = subprocess.check_output(['type', path], shell=True)
>>> print output
Vinu

有关在Python中调用外部命令的所有方法,请参阅此comprehensive overview to a related question,有关subprocess的详细信息,请参阅this article by Doug Hellmann

答案 1 :(得分:4)

'type'命令不运行,因为它是一个内部命令 - 命令解释器/ shell的内部命令CMD.EXE。您必须改为调用“cmd.exe类型文件名”。 确切的代码是:

call(['cmd','/C type abc.txt'])

答案 2 :(得分:1)

pat = "d:\info2.txt"

在Python和大多数其他编程语言中,\是一个转义字符,除非加倍,否则它不包含在字符串中。使用原始字符串或转义转义字符:

pat = "d:\\info2.txt"

答案 3 :(得分:0)

使用\

逃离\\
pat = "d:\\info2.txt"

或使用“原始”字符串:

pat = r"d:\info2.txt"