我正在编写一个接受一系列命令并执行它们的工具。
这些命令的编写方式就像在终端/控制台中键入一样。为此,我使用Popen()了shell=Trueso 来模仿某人在终端/控制台中输入的行为。
现在我想允许用户指定他喜欢的命令解释器。更准确地说,在 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)同时仍然尽我所能模仿它。
有什么想法吗 ?