2014-10-12 163 views
0

对于一个项目,我需要通过Runtime.getRuntime.exec()启动python.exe。但是,当我尝试运行它时,它不会执行,但它不会抛出IOException。下面的代码:Java- Runtime.getRuntime().exec()不会执行python.exe

try 
    { 

     Process process=Runtime.getRuntime().exec("C:\\Program Files (x86)\\PythonTest\\python.exe"); 
    } 
    catch (IOException e) 
    { 
     System.out.println("Cannot find python.exe"); 
     e.printStackTrace(); 
    }  

回答

1

你需要得到来自过程的输出(waitFor()其完成)。喜欢的东西,

final String cmd = "C:/Program Files (x86)/PythonTest/python.exe"; 
Process p = Runtime.getRuntime().exec(cmd); 
final InputStream is = p.getInputStream(); 
Thread t = new Thread(new Runnable() { 
    public void run() { 
    InputStreamReader isr = new InputStreamReader(is); 
    int ch; 
    try { 
     while ((ch = isr.read()) != -1) { 
     System.out.print((char) ch); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
}); 
t.start(); 
p.waitFor(); 
t.join(); 

真正做到与python的东西,你会想要得到的OutputStream

+0

除非puthinnisn配置正确,你可能不会得到任何出,这并不意味着你应该检查输出,并获得退出代码的过程也将是一个好主意 – MadProgrammer 2014-10-12 03:07:42

1

我认为这个问题是由于eval错误地分割命令字符串。我的理解是,exec("C:\\Program Files (x86)\\PythonTest\\python.exe")将尝试运行名为"C:\\Program"的应用程序,并传递它2个命令行参数。

试试这个:

exec(new String[]{"C:\\Program Files (x86)\\PythonTest\\python.exe"}); 

exec(String, ...)命令行解析是原始的,并且经常有从程序员的角度不正确的行为。最好的选择是经常自己拆分命令和参数。

+0

我试过这个,还有什么建议和它会为我尝试执行的其他.exe工作,但仍然不是python.exe。我不知道它是否是特定于python.exe或什么的。 – Evando 2014-10-12 21:08:27

相关问题