我想用subprocess.Popen()
这个包含&符号的命令执行,以解释为批处理串联运算符:
COMMAND="c:\p\a.exe & python run.py"
subprocess.Popen(COMMAND,cwd=wd,shell=False)`
然而,&符号&
被解释为a.exe
的参数,而不是批处理运算符。
解决方案1:看过相关的question后,解决方案可能是设置shell=True
,但是由于我的工作,这会导致错误“不支持UNC路径”目录是远程的。该解决方案不能正常工作。
解决方案2:可执行文件a.exe
应该使用-inputDir
参数来指定文件的远程位置并使用本地工作目录。我认为这个解决方案可行,但我可能没有可执行文件的源代码。
解决方案3:我可以将c:\p\a.exe & python run.py
写入command.bat
,然后使用
COMMAND="c:\p\command.bat"
subprocess.Popen(COMMAND,cwd=wd,shell=False)`
这种方法有用吗?
解决方案4:我正在尝试解决此问题,仅更改subprocess.Popen()
电话。有可能吗?基于python Popen doc,我怀疑是不可能的。请告诉我,我错了。
另见this相关问题。
更新
解决方案5:@mata建议使用Powershell Popen(['powershell', '-Command', r'C:\p\a.exe; python run.py'])
。这实际上有效,但现在我必须处理稍微不同的命令,并且懒惰我决定使用解决方案3.
我最喜欢的解决方案是解决方案3,创建一个.bat
文件并将其命名为
COMMAND="c:\p\command.bat"
subprocess.Popen(COMMAND,cwd=wd,shell=False)
答案 0 :(得分:0)
我会使用Solution 3
The & character is used to separate multiple commands on one command line.
Cmd.exe runs the first command, and then the second command.
在这种情况下,您可以像这样编写批处理文件:
@echo off
c:\p\a.exe
python run.py
另外,使用cmd.exe时值得注意:
The ampersand (&), pipe (|), and parentheses ( ) are special characters
that must be preceded by the escape character (^) or quotation marks
when you pass them as arguments.