使用 java 流程构建器调用 Python 流程时出现问题
Issues while Invoking Python process using java process builder
我正在使用 java 进程构建器启动 python 进程,带有一个标志和一个参数,如下所示。但是我没有看到任何异常,也没有进程启动。
我想要 运行 的命令是
python oc_db5.py -c input.json
文件 oc_db5.py 的位置是
/opt/jvision/grpc/gui
我的代码如下所示
processBuilder = new ProcessBuilder(
Arrays.asList(
"python",
"oc_db5.py",
"-c",
"input.json"));
processBuilder.directory(new File("/opt/jvision/grpc/gui"));
processBuilder.start();
logger.info("Process started ..." + new Date());
int count = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(
process.getInputStream()));
while ((lineData = br.readLine()) != null) {
System.out.println("line: " + ++count + " " + lineData);
logger.info("line: " + ++count + " " + lineData);
}
process.waitFor();
process.getErrorStream();
process.waitFor();
process.exitValue();
我可以看到日志文件包含条目 "process start...",但我并没有真正看到该进程已启动。想知道我错过了什么。
你能检查一下 python 是否在你的 PATH 中吗?很久以前我对自定义命令有类似的问题。您可以使用绝对路径来尝试它:)。
您还可以通过
检查您的环境变量
Map env = System.getenv();
如果您正在使用 Linux,您可以像 "sleep 1000" 一样启动进程,然后通过 "ps aux | grep sleep" 或类似的方式检查它是否存在于系统进程 table 中 :)
我正在使用 java 进程构建器启动 python 进程,带有一个标志和一个参数,如下所示。但是我没有看到任何异常,也没有进程启动。
我想要 运行 的命令是
python oc_db5.py -c input.json
文件 oc_db5.py 的位置是
/opt/jvision/grpc/gui
我的代码如下所示
processBuilder = new ProcessBuilder(
Arrays.asList(
"python",
"oc_db5.py",
"-c",
"input.json"));
processBuilder.directory(new File("/opt/jvision/grpc/gui"));
processBuilder.start();
logger.info("Process started ..." + new Date());
int count = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(
process.getInputStream()));
while ((lineData = br.readLine()) != null) {
System.out.println("line: " + ++count + " " + lineData);
logger.info("line: " + ++count + " " + lineData);
}
process.waitFor();
process.getErrorStream();
process.waitFor();
process.exitValue();
我可以看到日志文件包含条目 "process start...",但我并没有真正看到该进程已启动。想知道我错过了什么。
你能检查一下 python 是否在你的 PATH 中吗?很久以前我对自定义命令有类似的问题。您可以使用绝对路径来尝试它:)。 您还可以通过
检查您的环境变量Map env = System.getenv();
如果您正在使用 Linux,您可以像 "sleep 1000" 一样启动进程,然后通过 "ps aux | grep sleep" 或类似的方式检查它是否存在于系统进程 table 中 :)