我有一个输出'hello world'的python文件。
print 'hello world'
我想从我的java类中触发这个python脚本。
public String runPythonFile(String pathname) throws IOException{
return Runtime.getRuntime().exec(pathname).toString();
}
问题是我的输出只是
java.io.BufferedOutputStream@776ec8df
而不是
你好世界
我是否应该从java中触发它或者以不同的方式从python中输出它?
答案 0 :(得分:0)
你误解了一些事情。
return Runtime.getRuntime().exec(pathname).toString();
请查看以下代码 exec(路径名) 您将pathname参数传递给 exec 方法。但是,要执行python文件,您应该将python脚本的路径名传递给 python可执行文件。所以命令看起来像这样:
python path/to/file
注意:如果文件的路径包含空格,请确保将其包装在“double qoutes”中
你误解的第二件事是: 的 EXEC(...)。的toString()即可。 exec 方法返回Process,因此调用toString()将不会提供python脚本的输出。
为了获得该输出,我们需要读取已执行进程的输入流。您可以通过调用 Process#getInputStream()
来获取此输入流示例强>
public static void main(String[] args) throws IOException, InterruptedException {
Process p = Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", "python /home/bram/Desktop/hello_world.py" });
p.waitFor();
try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
p.waitFor()等待进程完成。
在进程终止后,我们获取 InputStream 并将其传递给 BufferedReader 以便于阅读。
请注意我使用的是linux。 如果您使用的是Windows,则只需执行 Runtime.getRuntime()。exec(“pyton path / to / pythonfile”)