我用這條線從Java應用程序中執行python腳本:啓動過程不消耗其輸出
Process process = Runtime.getRuntime().exec("python foo.py", null, directory);
腳本運行與我的Java應用程序和其他客戶端通信的TCP服務器。
當我調試腳本時,我在這裏和那裏都有一些控制檯打印,一切都很好。腳本從Java代碼啓動後,在一段固定的時間後,我的TCP服務器沒有響應。經過一段時間的調試和挫折之後,我從腳本中刪除了我的打印件,並且一切按預期工作。
似乎有一些內存分配給進程的標準輸出和錯誤流,如果你沒有使用它,進程在嘗試寫入完整緩衝區時卡住了。
如何啓動該過程以便我不必消耗標準輸出流?我想保留打印以供調試,但不想啓動一個讀取我不需要的流的線程。
由於某些原因,這不適用於Java:Runtime.getRuntime()。exec(「python foo.py> NUL」,null,directory);我試過使用文件,但沒有運氣。在我在這裏發佈我的問題之前,我這樣做了。正如@jenaiz提到的那樣,這可能比腳本中的硬編碼開關更受歡迎 – unexplored 2012-01-04 19:58:03
@unexplored它不起作用,因爲'>'是一個shell運算符,並且您正在直接執行python解釋器,而沒有shell。你可以用Java來調用一個shell,並將它傳遞給運行'python'所需的參數,但這是一個混亂的痛苦,更不便攜。相反,請修改您的腳本本身。 – erickson 2012-01-04 20:09:03