如何不用python子进程转义&符号

时间:2016-09-29 07:56:56

标签: python-3.x batch-file subprocess unc

我想用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)

1 个答案:

答案 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.