2017-01-09 135 views
0

我有一個全局安裝的節點模塊:rollup,但可以是任何其他模塊。如果我打開命令提示符(贏得10)並輸入rollup -v它將返回模塊版本。我試圖在java中使用ProcessBuilder/Process來實現此目的。使用Java ProcessBuilder調用全局安裝的節點模塊

這裏是我的Java代碼:

ProcessBuilder pb = new ProcessBuilder("rollup","-v"); 
File log = new File("log.txt"); 
pb.redirectErrorStream(true); 
pb.redirectOutput(Redirect.appendTo(log)); 

Process p = pb.start(); 
assert pb.redirectInput() == Redirect.PIPE; 
assert pb.redirectOutput().file() == log; 
assert p.getInputStream().read() == -1; 

它返回以下錯誤:

java.io.IOException: Cannot run program "rollup": CreateProcess error=2, The system cannot find the file specified

如果我java -versionnode -v它的工作進行測試。

我有一個工作解決方案,但我不喜歡它,它有點混亂。我創建了一個bat文件:

//test.bat 
rollup -v 

然後我運行批處理文件ProcessBuilder pb = new ProcessBuilder("test.bat");和工作,但在未來我希望其他參數傳遞給rollup,我不希望創建爲每個不同的bat文件參數。

我想我錯過了一些東西,我不知道是什麼?我是新來處理API。

回答

1

不是你的第一個問題的解決方案,但對你的解決方法:

您可以更改test.bat到​​與參數調用它。

在這種情況下,%*代表所有提供給批處理文件的參數。有了它,您可以根據需要使用不同的參數從程序中調用它。