2012-07-31 124 views
3

我有一個python編譯的腳本(script.pyc,我沒有.py文件),從我的Windows命令提示符運行良好,我想從我的Java的應用程序。 我試圖使用運行時()方法:在Java中執行python編譯的腳本(.pyc)

 Runtime runtime = Runtime.getRuntime(); 
    runtime.exec(new String[] {"C:\\toto\\tools\\script.pyc" ,"arg","arg2" }); 

,但我得到一個錯誤:

Exception in thread "main" java.io.IOException: Cannot run program "C:\Nuance\VoCon Hybrid\SDK_v4_3\tools\clctodict.pyc": CreateProcess error=193, %1 n?est pas une application Win32 valid 

在我的終端腳本工作做好( 「ARG」 是一個txt文件, 「ARG2」 是輸出名稱和腳本在沒有任何問題的情況下執行其作業)。

我也嘗試推出我的腳本getDesktop():

 File fie = new File("C:\\toto\\tools\\script.pyc" ,"arg","arg2"); 
    Desktop.getDesktop().open(fie); 

是沒有問題的,但我不能添加參數,這樣我就可以看到前幾秒鐘期間,終端窗口打開瞬間消失。 我也嘗試過使用JPython,也沒有成功(也許我們不能在.pyc上使用methode「execfile」)

+0

使用[的ProcessBuilder]嘗試( http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html) – Zoop 2012-07-31 16:12:20

回答

2

你可以做這樣的事情

Process p = Runtime.getRuntime().exec(new String[]{"python.exe" ... other args) 

然後,你可以調用p.waitFor()等待過程和p.exitValue結束()測試程序是否成功退出。

您也可以通過p.getOutputStream輸出流()獲取您的python腳本打印的文本

請參閱類文檔瞭解更多信息:http://docs.oracle.com/javase/6/docs/api/java/lang/Process.html

+0

好的!有用!我使用getErrorStream()和getInputStream()來查看錯誤是什麼,並糾正它們(python 2.7而不是2.5 = pyc中的壞幻數,然後壞參數或參數不存在...)! – gamerounet 2012-08-01 15:42:04

2

就像你需要一個jvm來運行一個.class一樣,你需要一個python解釋器來運行.pyc。

試着這麼做:

runtime.exec(new String[] {"c:\\Python26\\bin\\python.exe", "C:\\toto\\tools\\script.pyc" ,"arg","arg2" }); 
+0

事實上,沒有更多的錯誤,但無法查看腳本是否運行正常,因爲我無法找到必須生成的文件(在我的情況下是arg2)。此外,如果我只是讓(「python」,「script .pyc」),結果是相同的(但是當我在沒有args的終端中啓動.pyc腳本時,某種「幫助」告訴我所需的參數是打印)。 – gamerounet 2012-08-01 09:10:50