Python:如何将此命令链一次传递给subprocess.call()

时间:2014-09-28 14:17:52

标签: python subprocess

我正在尝试将这些以下链式命令一次性传递给 子流程 。但是它抛出了错误。

要传递的命令:

"C:\MyScript\run.bat" -I"C:\MyScript" -- "C:\MyScript\MyScript1.pl" "file_name"

其中,file_name是一个保存文件名的变量。

代码:

cmd = '"C:\MyScript\run.bat" -I"C:\MyScript" -- "C:\MyScript\MyScript1.pl"' + " " + filename
subprocess.call(cmd)

错误:

Traceback (most recent call last):
File "c:\Test\WWX_2.py", line 28, in
<module>
subprocess.call(cmd)
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 

2 个答案:

答案 0 :(得分:2)

使用原始字符串文字来防止\r被解释为回车符。仅空格参数也作为实际命令行参数传递,但您可能不希望发生这种情况,因此请将其删除。

cmd = [r'C:\MyScript\run.bat', r'-I"C:\MyScript"', '--', r'C:\MyScript\MyScript1.pl', filename]
subprocess.call(cmd)

答案 1 :(得分:0)

你必须逃避路径中的所有反斜杠,即

C:\\whatever\\batch.bat