gpt4 book ai didi

java - PrintWriter 冲洗不起作用?

转载 作者:行者123 更新时间:2023-11-29 09:10:31 28 4
gpt4 key购买 nike

我正在尝试让以下代码正常工作,以便我可以在其他地方使用它。

实际上,它(应该)启动另一个进程,在其中运行 python,并向 python 提供一些命令。但是,实际上,除非我关闭该进程的流,否则永远不会发送 python 命令。我认为 flush() 应该强制发生这种情况,但它似乎没有用。任何人都可以提供任何关于为什么 flush() 可能不起作用以及我可以做些什么来避免这种情况的见解吗?谢谢。

请注意,如果我调用 close(),则会发送命令。但是,我希望能够在这个命令之后发送更多命令,所以在这里使用 close() 似乎是 Not Acceptable 。 (我最终会关闭()一切)

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class Foo {
public static void main(String[] args) throws IOException {
Process cmd = Runtime.getRuntime().exec("python");

InputStream inStream = cmd.getInputStream();
Thread stdout = new Thread(new stdOutReader(inStream));
stdout.start();

InputStream errStream = cmd.getErrorStream();
Thread stderr = new Thread(new stdOutReader(errStream));
stderr.start();

OutputStream outStream = cmd.getOutputStream();
OutputStreamWriter os = new OutputStreamWriter(outStream);
PrintWriter pWriter = new PrintWriter(outStream, true);
pWriter.println("print \"Testing..\"");

pWriter.flush();
int x = 0;
while (x < 100){
//Do stuff here (will not be an infinite loop in actual code)
}

pWriter.close();

}
private static class stdOutReader implements Runnable{
InputStream inStream;

public stdOutReader(InputStream inStream){
this.inStream = inStream;
}

public void run() {
InputStreamReader reader = new InputStreamReader(this.inStream);
Scanner scan = new Scanner(reader);
while (scan.hasNext()) {
System.out.println(scan.next());
System.out.flush();
}
}
}
}

最佳答案

考虑使用 Apache Commons Executor而不是直接使用 Runtime.exec() API。

关于java - PrintWriter 冲洗不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732720/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com