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

Windows下Python调用Git Bash执行Java算法脚本报错求助

问题:Python调用Bash脚本执行Java程序时找不到主类

在Windows的Git Bash环境中,手动执行bash_script.sh可正常运行Java策略挖掘算法,但通过Python脚本调用时抛出以下错误:

Error: Could not find or load main class edu.dar.algo.Experiment
Caused by: java.lang.ClassNotFoundException: edu.dar.algo.Experiment

相关文件与目录结构

目录结构

case-studies/
   -- temp_check.abac
lib/
   -- commons-math-2.2.jar
   -- commons-math3-3.3.jar
src/
bin/
compile.sh
run
python_script.py
bash_script.sh
temp_output.txt

原Python脚本

import os
import subprocess

os.environ['PATH'] = 'C:/Program Files/Java/jdk-15.0.1/bin/java.exe' + os.environ['PATH']

bash_command = "./bash_script.sh"
subprocess.run(["bash", "-c", bash_command])

bash_script.sh

#!/bin/bash

# Compile
./compile.sh

# Run using the input file
./run -m ../case-studies/temp_check.abac -verbose >> temp_output.txt

原run脚本

#!/bin/bash

cd bin

java -cp "../lib/commons-math-2.2.jar;../lib/commons-math3-3.3.jar;." edu.dar.algo.Experiment $* 

cd ..

修复方案

1. 修正PATH环境变量与工作目录

原代码错误地将java.exe路径直接拼入PATH,且未指定正确工作目录,修改后Python脚本如下:

import os
import subprocess

# 正确添加Java的bin目录到PATH,使用系统路径分隔符
os.environ['PATH'] = 'C:/Program Files/Java/jdk-15.0.1/bin' + os.pathsep + os.environ['PATH']

bash_command = "./bash_script.sh"
# 替换为你的仓库根目录绝对路径,确保相对路径生效
subprocess.run(["bash", "-c", bash_command], cwd="C:/your/repository/absolute/path")

2. 修复run脚本的类路径分隔符

Git Bash模拟Unix环境,类路径分隔符需用冒号(:)而非Windows的分号(;),修改run脚本:

#!/bin/bash

cd bin

# 替换分号为冒号,适配Git Bash环境
java -cp "../lib/commons-math-2.2.jar:../lib/commons-math3-3.3.jar:." edu.dar.algo.Experiment $* 

cd ..

3. 增加编译失败校验(可选)

在bash_script.sh中添加编译结果检查,避免编译失败后继续执行运行命令:

#!/bin/bash

# 编译并检查执行结果
if ! ./compile.sh; then
    echo "编译失败,终止执行"
    exit 1
fi

# 运行程序
./run -m ../case-studies/temp_check.abac -verbose >> temp_output.txt

原因说明

  • PATH设置错误:原代码将具体的java.exe路径加入PATH,导致系统无法识别javac等Java工具的位置。
  • 路径分隔符不匹配:Git Bash环境需使用Unix风格的冒号作为类路径分隔符,而非Windows的分号。
  • 工作目录不一致:Python脚本默认工作目录可能与手动执行Git Bash时不同,通过cwd参数强制指定仓库根目录可解决相对路径失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:29:59