使用Python 3子进程运行多个命令

时间:2017-03-12 18:32:41

标签: python subprocess python-3.6

我尝试使用subprocess.Popen运行多个命令,但我收到了错误。

subprocess.Popen(['C:/cygwin64/Cygwin.bat' && './iv4_console.exe ../embedded/LUA/analysis/verbose-udp-example.lua'], bufsize=0, executable=None, 
                       stdin=None, stdout=None, stderr=None, 
                       preexec_fn=None, close_fds=False, 
                       shell=True, cwd="F:/Master_Copy2/iv_system4/ports/visualC12/Debug", env=None, universal_newlines=False, 
                       startupinfo=None, creationflags=0)

错误说: 不支持的操作数类型&:' str'和' str' 我无法弄清楚问题。

3 个答案:

答案 0 :(得分:1)

虽然我不是子进程模块的专家,但我相信你的问题是你在普通python中使用 windows命令行命令连接opertator &&,它将其解释为{ {1}},按位AND运算符。你应该可以通过替换

来解决这个问题
&

subprocess.Popen(['C:/cygwin64/Cygwin.bat' && './iv4_console.exe 
               ../embedded/LUA/analysis/verbose-udp-example.lua']...

这将subprocess.Popen(['C:/cygwin64/Cygwin.bat' + ' && ' + './iv4_console.exe ../embedded/LUA/analysis/verbose-udp-example.lua']... 替换为字符串&&,然后将其传递给Windows命令行,然后命令行正确地链接命令。希望这有帮助!

答案 1 :(得分:0)

&安培;是一个二元运算符。如果你试图连接字符串use +而不是。

此外,被调用命令的参数应作为列表的元素传递,而不是在同一个字符串中传递。

答案 2 :(得分:0)

你应该使用&&在字符串里面:

subprocess.Popen(['C:/cygwin64/Cygwin.bat && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-example.lua'], bufsize=0, executable=None, 
                   stdin=None, stdout=None, stderr=None, 
                   preexec_fn=None, close_fds=False, 
                   shell=True, cwd="F:/Master_Copy2/iv_system4/ports/visualC12/Debug", env=None, universal_newlines=False, 
                   startupinfo=None, creationflags=0)

&安培;&安培;假设您希望第二个命令仅在第一个命令成功时运行。其他运营商(& ,;等)根据您的要求适用。