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