gpt4 book ai didi

python - 如何用不同的 shell 调用 Popen?

转载 作者:可可西里 更新时间:2023-11-01 09:45:21 24 4
gpt4 key购买 nike

我正在编写一个接受一系列命令并执行它们的工具。

命令的编写方式就像在终端/控制台中输入的一样。为此,我使用了 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) 中重新实现“魔法”,同时仍然尽我所能模仿它。

有什么想法吗?

最佳答案

shell=True 几乎普遍都是错误的,这里也不异常(exception)。在这种情况下,your_command 是为 bash 解析而构建的字符串,使用:

subprocess.Popen([r'C:\Program Files (x86)\Git\bin\bash.exe', "-c", your_command])

...并且该命令将仅由指定的 shell(Git 提供的 shell)解析,而不需要由 COMSPEC 的 shell 解析以生成命令供庆典。

关于python - 如何用不同的 shell 调用 Popen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com