Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中查找windows上bash可执行文件的位置_Python_Windows_Bash_Shell_Subprocess - Fatal编程技术网

从python中查找windows上bash可执行文件的位置

从python中查找windows上bash可执行文件的位置,python,windows,bash,shell,subprocess,Python,Windows,Bash,Shell,Subprocess,我正在编写一个程序来执行简短的shell一行程序(可能包括管道和后台任务等),我希望尽可能使它跨平台“正常工作” 对于mac/linux,以下各项似乎工作正常: shell=os.environ.get(“shell”,“bin/bash”) subprocess.Popen([shell,“-c”,脚本内容]) 但是,在windows上: SHELL通常不设置 假设安装了bash,那么可以在各种不同的地方找到可用的bash可执行文件 在windows中,使此操作尽可能可靠的最佳方法是什么?您

我正在编写一个程序来执行简短的shell一行程序(可能包括管道和后台任务等),我希望尽可能使它跨平台“正常工作”

对于mac/linux,以下各项似乎工作正常:

shell=os.environ.get(“shell”,“bin/bash”)
subprocess.Popen([shell,“-c”,脚本内容])
但是,在windows上:

  • SHELL
    通常不设置
  • 假设安装了bash,那么可以在各种不同的地方找到可用的bash可执行文件

  • 在windows中,使此操作尽可能可靠的最佳方法是什么?

    您正在寻找
    C:\windows\System32\cmd.exe


    如果您正在进行跨平台操作,您可以使用
    sys.platorm
    查找用户正在使用的平台。

    在窗口中,“COMSPEC”包含当前命令程序的名称。您可以将无条件查找写入环境中的查找。通常,最好采用这种方法,因为在许多情况下,python脚本可以从“git bash”、WSL或类似的工具执行。无需为特定平台显式编程

  • 首先使用SHELL
  • 如果没有,请使用COMSPEC

  • 请参阅:

    如果安装了Windows git客户端,则应该安装git bash,因此在CMD窗口中:

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

    然后您可以运行python程序。

    我认为cmd.exe不是我想要的。具体地说,我想为POSIX shell编写一行程序(通常是bash,但大多数bash行将在zsh、fish、tcsh等中工作),这可能看起来像
    someexecutable>/dev/null 2>&1&。我认为在开发人员windows机器上有一个合理的机会可以使用bash,我主要需要找到它。我的理解是,cmd.exe通常不会使用与*nix shell相同的语法/语义。