我正在尝试制作一个运行python程序的成熟java程序。python程序如下所示:
print('Enter two numbers')
a = int(input())
b = int(input())
c = a + b
print(c)
如果我执行此代码,终端将如下所示:
Enter two numbers
5
3
8
现在,当从java执行此代码时,我想要相同的输出。以下是我的java代码:
import java.io.*;
class RunPython {
public static void main(String[] args) throws IOException {
String program = "print('Enter two numbers')\na = int(input())\nb = int(input())\nc = a + b\nprint(a)\nprint(b)\nprint(c)";
FileWriter fileWriter = new FileWriter("testjava.py");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(program);
bufferedWriter.close();
Process process = Runtime.getRuntime().exec("python testjava.py");
InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(process.getOutputStream());
InputStreamReader read = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(read);
String output;
while (process.isAlive()) {
while (!bufferedReader.ready());
System.out.println(bufferedReader.ready());
while (!(output = bufferedReader.readLine()).isEmpty()) {
System.out.println(output);
}
bufferedReader.close();
if (process.isAlive()) {
outputStreamWriter.write(in.readLine());
}
}
}
}
但在运行该程序时,仅显示第一行,并获取第一个输入。之后,程序没有响应。我犯了什么错误?解决办法是什么?
2条答案
按热度按时间jogvjijk1#
使用过程:
运行时可以添加任意数量的参数。
使用jython(更简单的选项):
它嵌入了jython,可以在这里阅读。
注意:您可能需要使用
python.path
如果要使用已安装的任何软件包。可以通过在已给出的代码上方添加以下代码来完成此操作:如果需要进行相反的操作,也可以返回值,可以在jython文档中找到
hsvhsicv2#
处理另一个进程的输入和输出有点混乱,您可以在这里找到一个很好的答案
因此,将这些答案应用于代码可能是这样的:
注意,pythoninput在java中是一个bufferedwriter,反之亦然,pythonoutput是一个bufferedreader。