使用Java ProcessBuilder无法从batchfile运行python脚本

时间:2019-05-02 11:20:10

标签: java python batch-file processbuilder

我需要从Java代码运行一个批处理文件,在该文件中应执行python脚本,但该脚本不起作用。

通过双击运行批处理文件,python脚本正确执行。使用JAVA ProcessBuilder运行批处理文件无法完全正常工作。来自批处理文件(-> echo)的textoutput被打印,但是没有调用python。我该如何解决?我什至尝试直接使用ProcessBuilder运行Python脚本,但也不会生成任何输出。

直接在JAVA中运行Python

String pyPath = "D:/<...>/my_py_file.py";
ProcessBuilder pb = new ProcessBuilder("cmd","/c","D:/Python27/ArcGISx6410.5/python",pyPath);
Process proc = pb.start();

效果不佳:

在JAVA中运行批处理文件,调用my_py_file.py

ProcessBuilder pb = new ProcessBuilder("cmd","/c","D:/<...>/my_bat_file.bat");
Process proc = pb.start();

这是我的蝙蝠文件:

@echo execute script
@echo off
cd\
d:
cd Python27/ArcGISx6410.5
@echo Python Version
python -V
@echo start script
python D:/<..>/my_py_file.py
exit

通过双击输出:

execute script
Python Version
Python 2.7.13
start script
**pythonOutput**

使用ProcessBuilder进行输出:

execute script
Python Version
start script
*nothing*

1 个答案:

答案 0 :(得分:0)

我认为您的“直接在JAVA中运行Python”实现缺少的是,您没有在Process proc = pb.start();

之后处理输出

例如,您可以将输出流重定向到这样的文件:

pb.redirectOutput(Redirect.appendTo(FILENAME));

(所引用的文件应在重定向之前已经创建)

或者您可以将其引导到InputStream中,然后馈入InputStreamReader以进行进一步处理,例如:

BufferedReader br = new BufferedReader(new InputStreamReader(pb.getInputStream()));

因此,可以将其添加到Process proc = pb.start();

之后
相关问题