这是我正在尝试做的,使用类'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中,我从一开始就没有得到任何输出(我期待至少程序打印出来,直到'输入第一个值'但通常没有),程序一直在等待输入
对此有任何帮助