如何不使用 python 子进程转义与号
How not to escape an ampersand with python subprocess
我想用 subprocess.Popen()
执行此命令,其中包含一个将被解释为批处理连接运算符的符号:
COMMAND="c:\p\a.exe & python run.py"
subprocess.Popen(COMMAND,cwd=wd,shell=False)`
然而,符号 &
被解释为 a.exe
的参数,而不是批处理运算符。
解决方案 1: 看到相关的 question 后,一个解决方案可能是设置 shell=True
但会出现错误 'UNC path are not supported',因为我的工作目录是远程的。此解决方案无法正常工作。
解决方案 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)
我会用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.
我想用 subprocess.Popen()
执行此命令,其中包含一个将被解释为批处理连接运算符的符号:
COMMAND="c:\p\a.exe & python run.py"
subprocess.Popen(COMMAND,cwd=wd,shell=False)`
然而,符号 &
被解释为 a.exe
的参数,而不是批处理运算符。
解决方案 1: 看到相关的 question 后,一个解决方案可能是设置 shell=True
但会出现错误 'UNC path are not supported',因为我的工作目录是远程的。此解决方案无法正常工作。
解决方案 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)
我会用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.