使用Java ProcessBuilder?

2024-06-01 20:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我要做的,使用类“ProcessBuilder”将输入、输出流从python读取到java。为此,我编写了一个java示例python脚本

示例.java

String[] args = new String[]{"python","Sample.py"};
ProcessBuilder builder = new ProcessBuilder(args);
builder.redirectErrorStream(true);
try {
   p = builder.start();
} catch (IOException e) {
   e.printStackTrace();
}

StreamWriter stdInput = new StreamWriter(p.getInputStream());
stdInput.start();

... 

private class StreamWriter extends Thread{
... 
   public void run(){
      try {
         InputStreamReader isr = new InputStreamReader(is);
         BufferedReader br = new BufferedReader(isr);
         int ch;
         synchronized (StreamWriter.class){
            while ( (ch = br.read()) != -1){
               System.out.print((char)ch);
            }
          }
       }
       catch (IOException ioe) {
          ioe.printStackTrace();  
       }
    }
 }

样品.py

^{pr2}$

我在Ubuntu和Windows8上测试了我的代码,结果如下

在Windows8中,我可以打印“第一行”、“第二行”、“输入第一个值”并等待用户输入。这里的问题是,如何使用process.getOutputStream(),因为我曾经写过bufferedWriter.write(“某物”),bufferedWriter.flush(),直到我打电话outputstream.close()在我的代码中(它将关闭进程的输出流,如果没有它,我将无法向脚本提供第二次输入),它不会打印“输入第二个值”来要求用户输入第二个值。在

在Ubuntu中,我甚至从一开始就没有得到任何输出(我希望至少在'enterfirstvalue'之前程序打印出来,但是没有什么正常的),程序一直在等待输入

有什么帮助吗


Tags: py脚本示例newstringbuilderargsjava