Java- Runtime.getRuntime()。exec()不会执行python.exe

时间:2014-10-12 02:45:14

标签: java runtime

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

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();
    }    

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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, ...)命令行解析是原始的,并且从程序员的角度来看通常具有不正确的行为。最好的办法就是自己拆分命令和参数。