2
我想從我的Java應用程序運行一個shell命令。我編了一個名爲「SRILM」軟件,當我從殼一切運行正常:Process Builder java.io.IOException錯誤= 2
ngram-count -text /home/istanbul/Desktop/snlp_hmm/model.txt -order 3 -lm hoho.lm
然而,當我從我的Java應用程序運行:
ProcessBuilder lmBuilder = new ProcessBuilder("ngram-count", "-text", modelPath, "-order", "3", "-lm", "hohom.lm");
lmBuilder.directory(new File("/home/istanbul/srilm/bin/i686-m64"));
try {
final Process lmProcess = lmBuilder.start();
InputStream is = lmProcess.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
我得到這個錯誤:
java.io.IOException: Cannot run program "ngram-count" (in directory "/home/istanbul/srilm/bin/i686-m64"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at org.itu.hmm.AlgorithmRunner.evaluate(AlgorithmRunner.java:127)
at org.itu.hmm.ApplicationRunner.main(ApplicationRunner.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 7 more
任何想法?
所以,你的可執行文件的完整路徑是'/家庭/伊斯坦布爾/ srilm /斌/ i686的-M64/NGRAM數/ NGRAM-count' ?我假設你應該使用'lmBuilder.directory(新文件(「/ home/istanbul/srilm/bin/i686-m64 /」));'而不是。 – Tom 2015-04-05 14:38:35
@Tom我改變了它,現在我得到錯誤= 2。實際上,該程序是在路徑下,我可以從shell的任何目錄運行它(ngram-count)。 – kamaci 2015-04-05 15:02:25
那麼,你說processbuilder,你提供了一個工作目錄,所以它需要一個,但'/ home/istanbul/srilm/bin/i686-m64/ngram-count'是一個文件,因此是第一個例外。你能用新的異常更新你的問題嗎?哦,已經完成了,確定:)。 – Tom 2015-04-05 15:08:29