Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java ProcessBuilder?_Java_Python_Runtime_Processbuilder - Fatal编程技术网

使用Java ProcessBuilder?

使用Java ProcessBuilder?,java,python,runtime,processbuilder,Java,Python,Runtime,Processbuilder,这就是我试图做的,使用类“ProcessBuilder”读取从python到java的输入、输出流。为此,我编写了一个示例java,示例python脚本 Sample.java Sample.py 我在Ubuntu和Windows8上测试了我的代码,结果如下 在Windows8中,我可以打印“第一行”、“第二行”、“输入第一个值”,并等待用户的输入。这里的问题是,我如何使用process.getOutputStream将数据输入到脚本中,因为一旦我写入bufferedWriter.WriteMe

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

Sample.java

Sample.py

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

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

在Ubuntu中,我甚至从一开始就没有收到任何输出,我希望在“输入第一个值”之前,程序至少会打印出来,但通常情况下,程序会一直等待输入


这方面有什么帮助吗?

请注意:你知道Jython吗?是的,我知道,但我不知道如何使用松散耦合的b/w java和python将输入、输出、错误从python脚本流式传输到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();  
       }
    }
 }
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)