我需要使用java运行一些node.js程序
我的代码如下所示
String filePath= "/home/gilles/eclipse-workspace/informationGewinnungApp/videotool/src/videotool.js";
String option1 = "-m resources/WetterBerich";
String option2 = "--bg_content resources/logo.png";
ProcessBuilder Pb =
new ProcessBuilder("node",filePath+option1+option2);
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("/usr/bin"));
File log = new File("log");
// pb.redirectErrorStream(true);
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;但是我得到了这个错误
module.js:549
throw err;
^发布于 2019-10-08 18:40:26
您正在将多个(全部)选项放入一个参数中。
当您向shell提供命令行node this that时,它会将this和that作为单独的参数传递给node,这就是node期望接收它们的方式。ProcessBuilder不像shell那样将字符串拆分成单独的参数,您必须这样做:
ProcessBuilder Pb = new ProcessBuilder("node",filePath,
"-m", "resources/WetterBerich",
"--bg_content", "resources/logo.png");PS:使用/usr/bin作为你的工作目录通常不是一个好主意。
https://stackoverflow.com/questions/58283002
复制相似问题