2017-02-17 82 views
0

一些上下文:我试图在java上做一个GUI,并且在点击GUI上的一个按钮后运行python代码。例如,如果我按下java GUI上的开始按钮,它将在文件.py上运行python代码。Java - ProcessBuilder不输出我的python文件

为什么它不输出任何东西?您也可以通过创建一个测试python文件并将您自己的文件位置输入到下面的代码中来尝试。

到目前为止的代码:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import javax.swing.JFrame; 

public class main_gui extends JFrame { 
    public static void main(String[] args) throws Exception { 

     ProcessBuilder builder = new ProcessBuilder("cmd.exe", 
       "cd \"G:\\...Javaa\\filetranslatorapplication\\file_translator_app.py"); 
     builder.redirectErrorStream(true); 
     Process p = builder.start(); 
     BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line; 
     while (true) { 
      line = r.readLine(); 
      if (line == null) { 
       break; 
      } 
      System.out.println(line); 
     } 
    } 
} 

两件事情要记住:

  1. 在没有Python文件在同一个地方,因为这Java文件。
  2. java文件和python文件都在usb上,因此是“G:\ ..”。

此外,如果有人有更好的方式通过Java GUI运行python代码,请随时指向正确的方向。

+0

你为什么不试试jython? –

回答

0

下面应该为你工作:

ProcessBuilder builder = new ProcessBuilder("cmd", 
      "/c \"G: && python Javaa\\filetranslatorapplication\\file_translator_app.py\""); 

这被当我运行从不同的驱动器我的Java应用程序执行。但是,对于您来说,如果它是同一个驱动器,则无需切换到G:。您可以使用python命令执行py文件。

+0

它曾经工作过一次,但之后就不再工作了。您是否尝试过多次运行它? – Theo

+0

它怎么能只工作一次! :D您可以检查过程的输出。有没有文件锁或什么东西? –

+0

嗯是的,这似乎很奇怪,我不得不在我的最后做一些调试。尽管谢谢你的解决方案!你会碰巧知道如何在pycharm上使用jython吗?我已经下载并安装了jython。 – Theo

0

你的过程根本没有意义。

它只是产生一个cmdcd到一个无效的目录(因为它是一个文件)。

你想要的是可能

cmd /c python g:\your\path\foo.py 

cmd /c g:\your\path\foo.py 

或者干脆

may\be\full\path\is\needed\python g:\your\path\foo.py 

所以,你的代码应该是这样的:

ProcessBuilder builder 
    = new ProcessBuilder("cmd.exe", "/c", "python", "g:\\yourpath\\file_translator_app.py"); 
// or 
// = new ProcessBuilder("python", "g:\\yourpath\\file_translator_app.py"); 
// or 
// = new ProcessBuilder("cmd", "/c", "g:\\yourpath\\file_translator_app.py");