2014-10-12 164 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

相關問題