簡體   English   中英

使用java ProcessBuilder從批處理文件運行python腳本不起作用

[英]run python script from batchfile doesn't work by using java ProcessBuilder

我需要從Java代碼運行一個批處理文件,其中一個python腳本將被執行而且它不起作用。

通過doubleclick運行批處理文件,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();

這是我的bat文件:

@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

通過doubleclick輸出:

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

使用ProcessBuilder輸出:

execute script
Python Version
start script
*nothing*

我認為你的“直接在JAVA中運行Python”實現中缺少的是你在Process proc = pb.start();之后不處理輸出Process proc = pb.start();

例如,您可以將輸出流重定向到如下文件:

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

(引用的文件應該在重定向之前創建)

或者您可以將它引導到InputStream中,然后將其輸入到InputStreamReader中以進行進一步處理,如下所示:

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

所以無論哪種方式,在Process proc = pb.start();之后添加它Process proc = pb.start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM