我正在尝试以下操作,但失败并出现错误。我试图通过在控制台上调用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位版本。
答案 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"