我有一个全局安装的节点模块:rollup
但可以是任何其他模块。如果我打开命令提示符(win 10)并键入rollup -v
,则返回模块版本。我正在尝试使用java中的ProcessBuilder
/ Process
来实现此目的。
这是我的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:无法运行程序“汇总”:CreateProcess error = 2,系统找不到指定的文件
如果我使用java -version
或node -v
对其进行测试,则可以正常使用。
我有一个有效的解决方案,但我不喜欢它,它有点乱。我创建了一个bat文件:
//test.bat
rollup -v
然后我运行bat文件ProcessBuilder pb = new ProcessBuilder("test.bat");
并且正在运行,但是将来我想将其他参数传递给rollup
,我不想为每个参数创建不同的bat文件。
我想我错过了什么,我不知道是什么?我是新来处理api。
答案 0 :(得分:1)
不是第一个问题的解决方案,而是解决方法:
您可以将test.bat
更改为rollup %*
并使用参数调用它。
在这种情况下,%*
代表给批处理文件的所有参数。有了它,您可以根据需要使用不同的参数从程序中调用它。