获取python文件输出的打印字符串

时间:2015-10-21 18:26:50

标签: java python

我有一个输出'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中输出它?

1 个答案:

答案 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”)