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

Vin*_*aka 11 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
Run Code Online (Sandbox Code Playgroud)

有没有人知道这里有什么问题.!! ???

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

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

Bio*_*eek 19

添加shell=True呼叫:

>>> import subprocess
>>> subprocess.call('dir', shell=True)
0
Run Code Online (Sandbox Code Playgroud)

如你所见,它给出了返回代码的值,而不是输出dir.此外,它等待命令完成,这样做

>>> subprocess.call('date', shell=True)
Run Code Online (Sandbox Code Playgroud)

等你输入新的约会.

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

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

有关在Python中调用外部命令的所有方法,请参阅相关问题的全面概述,有关subprocess具体的更多信息,请参阅Doug Hellmann撰写的这篇文章.

  • + Vinu,那么解决方案是什么? (3认同)