簡體   English   中英

Java Processbuilder流到Python腳本

[英]Java Processbuilder Stream to Python-Script

我正在嘗試做的一個小項目有一個小問題。 我正在嘗試使用Java程序來調用Python腳本。

Java的:

ProcessBuilder pb = new ProcessBuilder("python3", "tmp.py");
process = pb.start();

OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));

writer.write("example" + "\n");

String output = reader.readLine();

Python腳本tmp.py(示例):

import sys

sys.stdin.readline()
print("Hello World")

它不會終止,這似乎是因為sys.sdin.readline()不會捕獲任何輸入,如果我刪除此行,它將終止就好了。 (stderror也為空)我嘗試了其他方法來解決此問題,但似乎沒有任何效果。

我真的很感謝任何建議。 提前致謝。

(更新:我試圖修改Java程序以訪問.jar文件而不是Python腳本,但是這里發生了相同的錯誤。使用Python方法subprocess.Popen()訪問腳本卻可以正常工作。)

確保您使用-u標志無緩沖地啟動python:

強制取消對stdout和stderr流的二進制層(可作為其緩沖屬性使用)。 如果寫入控制台,則文本I / O層仍將是行緩沖的;如果重定向到非交互式文件,則將保留塊I / O的層。

編輯

我建議同樣檢查緩沖。 python unbuffered是一種常見的方法,但是您可能仍然會有一些緩沖。 確保刷新Java writer, writer.flush()

暫無
暫無

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

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