【问题标题】:Find the location of the bash executable on windows from python从 python 中找到 Windows 上 bash 可执行文件的位置
【发布时间】:2020-07-26 17:21:22
【问题描述】:

我正在编写一个执行短 shell one 衬里的程序(可能包括管道和后台任务等),我想让它尽可能跨平台“正常工作”。

对于 mac/linux,以下似乎运行良好:

shell = os.environ.get("SHELL", "/bin/bash")
subprocess.Popen([shell, "-c", script_content])

但是考虑到在 Windows 上:

  1. SHELL 通常不设置
  2. 假设已安装 bash,则可能会在各种不同的地方找到可用的 bash 可执行文件

在 Windows 中使这项工作尽可能可靠的最佳方法是什么?

【问题讨论】:

    标签: python windows bash shell subprocess


    【解决方案1】:

    你在找C:\Windows\System32\cmd.exe吗?

    如果你正在做跨平台,你可以使用sys.platorm 来查找用户正在使用的平台。

    【讨论】:

    • 我不认为 cmd.exe 是我想要的。具体来说,我想为 POSIX shell(通常是 bash,但大多数 bash 行将在 zsh、fish、tcsh 等中工作)编写一个可能看起来像 some-executable > /dev/null 2>&1 &; 的衬里。我认为在开发人员的 Windows 机器上,有一个合理的机会可以使用 bash,我主要只需要找到它。我的理解是 cmd.exe 通常不会使用与 *nix shell 相同的语法/语义。
    【解决方案2】:

    在 Window 上,'COMSPEC' 保存当前命令程序的名称。您可以编写无条件查找以在环境中查找。通常,最好采用这种方法,因为在许多情况下,python 脚本可以从 'git-bash'、WSL 或类似文件中执行。无需针对特定平台显式编程。

    1. 首次使用 SHELL
    2. 如果没有,请使用 COMSPEC

    见:https://en.wikipedia.org/wiki/COMSPEC

    【讨论】:

      【解决方案3】:

      如果你安装了 Windows git 客户端,你应该有 git bash,所以在 CMD 窗口中:

      set SHELL="c:\Program Files\Git\bin\bash.exe"
      

      然后你就可以运行你的python程序了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 2017-05-29
        • 2014-05-03
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多