使用Java运行nodejs
我需要使用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;
^
回答如下:大部分为欺骗:Cannot ProcessBuilder to execute command for ffmpeg -i shortWav.wav -af silenceremove=1:0:-50dB shortWavCued.mp3
您正在将多个(所有)选项放在一个参数中。
当您将命令行node this that
提供给shell时,它将this
和that
作为单独的参数传递给节点,这就是节点期望接收它们的方式。 ProcessBuilder
不会像shell一样将字符串拆分为单独的参数,您必须这样做:
ProcessBuilder Pb = new ProcessBuilder("node",filePath,
"-m", "resources/WetterBerich",
"--bg_content", "resources/logo.png");
PS:通常将/usr/bin
用于您的工作目录不是一个好主意。