我有一个程序,它构建了一组进程,这些进程需要执行一个main.py
脚本,但它们之间的参数不同。
python C:/Users/us/Git/main.py 2 24 C:/Users/us/Git/output
python C:/Users/us/Git/main.py 24 48 C:/Users/us/Git/output
在Java中,我使用ProcessBuilder来运行流程:
for (int i = 0; i < cores; i++) {
ProcessBuilder pb;
if (i == 0) {
pb = new ProcessBuilder("python", scriptPath, "" + 2, "" + (last + subpart + diff) + "", "" + currentPath + "\\output");
last = last + subpart + diff;
} else {
pb = new ProcessBuilder("python", scriptPath, "" + last, "" + (last + subpart) + "", "" + currentPath + "\\output");
last = last + subpart;
}
builders[i] = pb;
}
for (int i = 0; i < cores; i++) {
processes[i] = builders[i].start();
}
System.out.print("waiting for " + processes.length + " processes to end");
但是,每次运行Java程序时,似乎ProcessBuilder
没有运行脚本......为什么?如何解决?
我目前使用Intellij作为IDE。
我试着构建项目并运行.jar
文件,看起来很有效,但我实际需要的是运行脚本,而不是每次都构建项目
为什么我认为ProcessBuilder不运行脚本?
脚本运行后,经过集群处理后,会产生一些文件,这些文件必须在output
目录下,java代码在处理完后去查找这些文件,没有找到,实际上抛出的Exeption是:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.io.File.getName()" because "winner" is null
1条答案
按热度按时间zzlelutf1#
错误出在环境变量中,我有两个环境变量,一个指向python.exe,另一个指向Python/Scripts文件夹,后者位于python.exe文件的目录中,似乎,出于某种奇怪的原因,Java调用Scripts文件夹来执行我作为输入传递给Process Builder类的脚本。所以我删除了那个环境变量,然后继续更新python脚本中使用的所有库。