使用Java ProcessBuilder?
这就是我试图做的,使用类“ProcessBuilder”读取从python到java的输入、输出流。为此,我编写了一个示例java,示例python脚本 Sample.java Sample.py 我在Ubuntu和Windows8上测试了我的代码,结果如下 在Windows8中,我可以打印“第一行”、“第二行”、“输入第一个值”,并等待用户的输入。这里的问题是,我如何使用process.getOutputStream将数据输入到脚本中,因为一旦我写入bufferedWriter.WriteMething,bufferedWriter.flush,直到我在代码中调用outputstream.close,它将关闭进程的输出流,否则我无法向脚本提供第二个输入,它不会打印“输入第二个值”来要求用户输入第二个值 在Ubuntu中,我甚至从一开始就没有收到任何输出,我希望在“输入第一个值”之前,程序至少会打印出来,但通常情况下,程序会一直等待输入使用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
这方面有什么帮助吗?请注意:你知道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)