【问题标题】:Open Git Bash shell using a python script and then run a shell script in git bash shell使用 python 脚本打开 Git Bash shell,然后在 git bash shell 中运行 shell 脚本
【发布时间】:2018-04-17 06:41:37
【问题描述】:

我正在尝试使用 python 脚本打开 Git Bash shell(C:\Program Files\Git\git-bash.exe),然后在 git bash shell 中运行 shell 脚本(例如 basicSc.sh)。我在 Windows 中运行 python 脚本。我怎样才能成功地做到这一点?另外我怎么知道 *.sh 脚本是从 python 脚本完成的?如何从 python 脚本传递 *.sh 脚本的一些参数?我正在运行 python 3.6.3。

Python 脚本(从 Windows 命令提示符运行):

import subprocess

p = subprocess.Popen
(
"C:\Program Files\Git\git-bash.exe --l -- C:/Users/userName/Documents/dev/basicSc.sh", 
bufsize=-1, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=True, 
shell=False, 
cwd="C:/Users/userName/Documents/dev", 
)

或者,如果我执行以下操作,我可以手动运行 *.sh 脚本。我正在尝试完全自动化。如果这是唯一可能的解决方案,我如何将 *.sh 脚本的结尾传达给 python 脚本?

import subprocess

p = subprocess.Popen("C:\Program Files\Git\git-bash.exe", 
bufsize=-1, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=True, 
shell=False, 
cwd="C:/Users/userName/Documents/dev", 
)

【问题讨论】:

    标签: windows git shell python-3.6 git-bash


    【解决方案1】:

    我能够通过执行以下操作来自动化该过程。 shell 脚本位于“C:/Users/userName/Documents/dev”目录中

    import subprocess
    p = subprocess.Popen("C:\Program Files\Git\git-bash.exe ./shellScriptName.sh 
                     argumentsForShellScript", 
                     bufsize=-1, 
                     executable=None, 
                     stdin=None, 
                     stdout=None, 
                     stderr=None, 
                     preexec_fn=None, 
                     close_fds=False, 
                     shell=False, 
                     cwd="C:/Users/userName/Documents/dev", 
                     )
    

    【讨论】:

      【解决方案2】:

      使用 p.wait() 确保您的脚本成功运行.....但是其他方法可以将脚本的所有进度捕获到任何记录器文件,然后检查它是否正在做它应该做的事情或不是....... 您也可以使用 CHECK_OUTPUT,因为它返回的返回码可用于断言您的脚本是否成功运行....将其保留在 Try-Except catch 中以捕获异常

      【讨论】:

        【解决方案3】:

        Reason Popen 接受参数列表,因此它应该如下所示

        import subprocess
        p = subprocess.Popen(["C:\Program Files\Git\git-bash.exe","C:/Users/userName/Documents/dev/basicSc.sh"], 
                             bufsize=-1, 
                             executable=None, 
                             stdin=None, 
                             stdout=None, 
                             stderr=None, 
                             preexec_fn=None, 
                             close_fds=True, 
                             shell=False, 
                             cwd="C:/Users/userName/Documents/dev", 
                             )
        

        【讨论】:

        • 我不明白答案的上下文。能否请您详细说明。