使用Java ProcessBuilder?

时间:2014-01-28 13:08:32

标签: java python runtime processbuilder

这是我正在尝试做的,使用类'ProcessBuilder'读取输入,从python到java的输出流。为此,我编写了一个示例java,示例python脚本,

Sample.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();  
       }
    }
 }

Sample.py

print('First line')
print('Second line')
intput1_var = raw_input("Enter first value")
print('you entered '+input1_var)

input2_var = raw_input("Enter second value")
print('you entered '+input2_var)

我在Ubuntu& amp;上测试了我的代码。 Windows8,下面是结果

在Windows8中,我能够打印“第一行”,“第二行”“输入第一个值”并等待用户输入。这里的问题是,我如何使用process.getOutputStream()输入数据到脚本,因为我写了bufferedWriter.write(“Something”),bufferedWriter.flush(),直到我在我的代码中调用outputstream.close() (这将关闭进程的输出流,否则我无法将第二个输入提供给脚本),它不会打印“输入第二个值”来询问用户第二个值。

在Ubuntu中,我从一开始就没有得到任何输出(我期待至少程序打印出来,直到'输入第一个值'但通常没有),程序一直在等待输入

对此有任何帮助

0 个答案:

没有答案