我正在嘗試通過Java應(yīng)用程序運行一段Python代碼。將命令直接放入命令提示符 cd'd 到工作目錄時,將完全按預(yù)期運行。但是,我試圖將運行時和 ProcessBuilder 類與 Process 類結(jié)合使用,但沒有產(chǎn)生正確函數(shù)的跡象,即每次調(diào)用代碼時都會創(chuàng)建一個 CSV 文件。我正在使用英特爾在Windows 10上運行此程序。我已將正在使用的每個目錄添加到我的環(huán)境 PATH 變量中,并嘗試在我的命令中僅使用文件名的完整路徑。我能找到的唯一生命來源是,如果我包含一個方法,一個方法將在調(diào)用該方法之前返回 true。我搜索了各種類似的問題,并得出結(jié)論,使用 ProcessBuilder 對象是最好的方法,最大的問題可能是我的命令的結(jié)構(gòu)。但是,我已經(jīng)進行了多次迭代,并且沒有發(fā)現(xiàn)任何將捕獲的錯誤更改為任何有用的東西。.waitFor().isAlive().waitFor()這是我一直在運行的隱私增強代碼,我在流程構(gòu)建器中完整地寫出了命令,因為這是我嘗試過的最后一次迭代。 for (int y = 1; y < iterator; y++) { try { String command = "C:\\Users\\myName\\AppData\\Local\\Programs\\Python\\Python37\\python C:\\Users\\myName\\IdeaProjects\\projectApplication\\script.py "; String pythonInputPath = " C:\\Users\\myName\\IdeaProjects\\projectApplication\\bin\\output" + y + ".wav "; ProcessBuilder pb = new ProcessBuilder(command+Arrays.toString(pythonCommandString).replaceAll("\\s","")+pythonInputPath+Integer.toString(y)); Process p = pb.start(); //Process checks System.out.println(p.isAlive()); p.waitFor(); System.out.println(p.isAlive()); //Destroying process once complete to ensure smooth iterations p.destroy(); } catch (Exception ex) { System.out.println("Problems with python script execution: " + ex); } }它們 python 代碼接收 WAV 文件 (pythonInputPath),該文件是應(yīng)用程序早期部分的產(chǎn)物,通常包含 ~20 個值 () 和單個迭代整數(shù) (y)。Integer[]pythonCommandString第一個調(diào)用為 true,第二個調(diào)用按預(yù)期為 false,但是腳本通常會創(chuàng)建一個 CSV,該 CSV 應(yīng)輸出到工作控制器中存在的 bin 文件,并且在從 Java 運行時無法發(fā)生。從其他示例中,我期望使用流程構(gòu)建器而不是運行時流來工作,但是,我的實現(xiàn)沒有區(qū)別。.isAlive()
1 回答

嗶嗶one
TA貢獻1854條經(jīng)驗 獲得超8個贊
不要將程序與其參數(shù)連接起來。引用 Oracle 流程構(gòu)建器文檔
每個進程構(gòu)建器管理這些進程屬性:命令、表示要調(diào)用的外部程序文件及其參數(shù)(如果有)的字符串列表
和
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
只需使用您使用的構(gòu)造函數(shù),但將每個參數(shù)作為單獨的字符串傳遞,否則操作系統(tǒng)將嘗試查找以您給出的整個命令行命名的應(yīng)用程序,并且顯然沒有這樣的程序
添加回答
舉報
0/150
提交
取消