打印机刷新不起作用



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

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

请注意,如果我调用 close(),则会发送命令。但是,我希望能够在这一个命令之后发送更多命令,因此在这里使用 close() 似乎是不可接受的。(我最终会关闭()所有内容)

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。

我看不出你的程序Foo有什么问题。我用一个将输入回显到输出(而不是 python)的程序对其进行了测试,它运行良好。

最新更新