You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下如何在Git Bash中通过Python调用Python脚本?

问题描述

在Windows环境中,我需要通过Python在Git Bash内运行Python文件。具体来说,我有一个Python编写的配置脚本,它需要调用其他Python脚本,但其中部分脚本使用了Unix命令,因此必须在Windows下通过Git Bash运行。

目前我使用的代码如下:

cmd = f'{sys.executable} mydependency.py'
pipe = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
# 后续会处理管道等待逻辑...

运行后报错:cannot execute binary file。

补充说明:mydependency.py实际上是simdjson项目中的amalgamate.py脚本。

我已尝试过以下操作但未解决:

  • 改用run或call替代subprocess.Popen
  • 使用f'{git_bash_path} {sys.executable} mydependency.py'格式的命令
  • 修改Popen、run和call的shell及executable参数

解决方案

要在Windows的Git Bash环境中通过subprocess调用Python脚本,核心是让subprocess启动Git Bash并在其环境内执行命令,而非直接调用Windows的Python解释器。以下是可行的实现方式:

方法1:通过Git Bash的bash.exe执行命令

Git Bash的核心可执行文件是bash.exe(通常路径为C:\Program Files\Git\bin\bash.exe),需要用它来包裹整个命令,同时注意参数的传递格式:

import subprocess
import sys

# 替换为你的Git Bash中bash.exe的实际路径
git_bash_path = "C:\\Program Files\\Git\\bin\\bash.exe"
# 构造在bash内执行的命令:调用Python解释器运行目标脚本
bash_command = f"{sys.executable} mydependency.py"
# 通过bash.exe执行命令,-c参数用于传递要执行的命令字符串
pipe = subprocess.Popen(
    [git_bash_path, "-c", bash_command],
    stderr=subprocess.PIPE,
    stdout=subprocess.PIPE,
    text=True  # 推荐添加,避免字节流处理问题
)
# 后续处理输出和等待
stdout, stderr = pipe.communicate()
if pipe.returncode != 0:
    print(f"执行失败: {stderr}")
else:
    print(f"执行输出: {stdout}")

关键注意事项

  • 优先使用参数列表:使用subprocess时优先传递参数列表(而非拼接成单个字符串),避免路径或命令中含空格时出现解析错误。
  • 加载Git Bash环境:目标脚本依赖的Unix命令(如sed、awk等)只有在Git Bash的环境中才可用,必须通过bash.exe -c的方式执行命令,才能加载这些工具和对应的环境变量。
  • 路径格式处理:如果脚本中涉及文件路径,Git Bash会自动将Windows风格路径(如C:\dir)转换为Unix风格(如/c/dir);若脚本内有硬编码的Windows路径,可通过Git Bash内置的cygpath工具在命令中转换。

针对simdjson的amalgamate.py脚本的额外提示

amalgamate.py依赖Unix命令行工具,通过上述方式调用Git Bash执行时,Git Bash会自动加载自身的工具集(如usr/bin下的命令),无需额外配置PATH即可正常运行。


内容的提问来源于stack exchange,提问作者Marcel Pi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:20:31