我在你的代码中看到两个问题:
一个问题是使用的命令行:
cmd.exe /c start python 这将启动一个新的cmd.exe实例,它本身就是使用它 start 启动一个分离的python进程。因此,分离的进程未连接到BufferedReader / BufferedWriter。
cmd.exe /c start python
start
你的第二个问题是python没有通过stdin执行你的“1 + 1”。 您只需通过创建文件来验证 test 与上下文 1+1\n 并在控制台上执行它: python < test 。你将看不到输出。
test
1+1\n
python < test
也可以看看 从stdin到bash脚本中的python代码的管道 。
在这种情况下,您需要先关闭输入流,然后才能读取输出流 python 处理。如果有人知道更好的方式,请告诉我们。
python
public static void main(String[] args) { String cmdString = "python"; try { ProcessBuilder pb = new ProcessBuilder(cmdString); Process pr = pb.start(); try (BufferedReader readerOfProc = new BufferedReader( new InputStreamReader(pr.getInputStream())); BufferedReader errorsOfProc = new BufferedReader( new InputStreamReader(pr.getErrorStream()))) { try (BufferedWriter writerToProc = new BufferedWriter( new OutputStreamWriter(pr.getOutputStream()));) { writerToProc.write("myVar=1+1\r\n"); writerToProc.write("print(myVar)\r\n"); writerToProc.flush(); } catch (Exception e) { e.printStackTrace(); } String s; while ((s = readerOfProc.readLine()) != null) { System.out.println("stdout: " + s); } while ((s = errorsOfProc.readLine()) != null) { System.out.println("stdout: " + s); } System.out.println("exit code: " + pr.waitFor()); } } catch (Exception e) { e.printStackTrace(); } }
希望这可以帮助!