[英]How to run a python script from java?
我有這個java應用程序並遇到了解析STDF的要求。
實際上我只需要獲取stdf文件的FAR,MIR和MRR部分。 sourceforge上存在一個stdf4j,但由於缺少文檔,我無法使用它。
解決方法是使用用python編寫的stdfparser並且相對更直接並且更容易完成工作,實際上我已經修改了以滿足我的需求。
所以現在我只需要詳細調用這個腳本並用Java讀取生成的文件,然后繼續使用現有的應用程序。
問題是在使用時:
Process p = r.exec("cmd /c python parser.py sample_data.std.gz -v test.txt");
生成的文本文件始終為空。 (注意我已經在實際的命令行上運行了這個並成功檢索了我需要的內容。)
有什么我錯過了,或者有更好的選擇。 (我試圖避免使用jython,因為我無法在生產環境中安裝它。)
你應該調用p.waitFor();
這樣,在外部進程完成執行之后,您的Java程序才會繼續運行。
更新1:還要確保從p.getErrorStream()
和p.getInputStream()
中讀取所有字節。 如果不這樣做可能會導致這個過程失敗。
更新2:您可能還需要檢查錯誤代碼的進程返回代碼。 通過waitFor()
的返回值訪問進程返回碼。
除了確保調用p.waitFor()
,您還可能必須閱讀流的內容。 如果未讀取流,則進程將停止。
嘗試添加此類: http : //www.physionet.org/physiotools/puka/sourceCode/puka/StreamGobbler.java
並稱之為:
new StreamGobbler(p.getErrorStream(), "Error");
new StreamGobbler(p.getInputStream(), "Input");
你或許可以自己想出一個更高效的課程,但是那個課程至少應該給你一個基本的想法(注意它不是我寫的)。
嘗試創建cmd文件,然后使用Java調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.