【发布时间】:2013-09-11 13:48:00
【问题描述】:
我正在编写一个接受一系列命令并执行它们的工具。
这些命令的编写方式就像在终端/控制台中键入一样。为此,我使用Popen() 和shell=True 来模仿某人在终端/控制台中输入的行为。
现在我想允许用户指定他喜欢的命令解释器。更准确地说,在 Windows 上,可以决定使用它的“Git bash”而不是 cmd.exe。
根据Popen()'s documentation,使用的解释器的选择是通过环境变量COMSPEC来完成的。
我尝试在调用之前将COMSPEC 设置为C:\Program Files (x86)\Git\bin\bash.exe,但它失败了,因为子进程将/c 添加到命令中,而base 需要-c。
我想过不使用shell=True,但后来我不知道到底有什么区别:
- 我应该将
.split()命令行转换为参数吗?如果有,怎么做? - 是否有
shell=True暗示/设置的任何标志?
这里的目标是不重新实现Popen(shell=True) 内部的“魔法”,同时仍然尽我所能模仿它。
有什么想法吗?
【问题讨论】:
标签: python windows shell subprocess