ere*_*eOn 2 python windows shell subprocess
我正在编写一个工具,它接受一系列命令并执行它们.
如果在终端/控制台中键入命令,则写入命令.要做到这一点,我用Popen()用shell=True来模仿某人在终端/控制台中输入的行为.
现在我想让用户指定他喜欢的命令解释器.更准确地说,在Windows上,可以决定使用其"Git bash"而不是cmd.exe.
根据Popen()文档,要使用的解释器的选择是通过环境变量完成的COMSPEC.
我试图在调用之前设置COMSPEC为C:\Program Files (x86)\Git\bin\bash.exe,但它失败了,因为subprocess会添加/c到命令中,而base期望-c.
我想不使用,shell=True但后来我不知道到底有什么区别:
.split()把命令行变成参数吗?如果是这样,怎么样?shell=True暗示/设定的标志?这里的目标是不重新实现内部的"魔力" Popen(shell=True) while still mimicking it the best I can.
有什么想法吗 ?
shell=True几乎普遍是错误的,这在这里没有什么不同.在这种情况下,where your_command是为bash解析而构建的字符串,请使用:
subprocess.Popen([r'C:\Program Files (x86)\Git\bin\bash.exe', "-c", your_command])
Run Code Online (Sandbox Code Playgroud)
...并且该命令将仅由指定的shell(由Git提供的shell)解析,而不是需要由shell解析COMSPEC以生成供bash使用的命令.