使用java运行nodejs
我需要使用java运行一些node.js程序 我的代码如下所示使用java运行nodejs,java,node.js,Java,Node.js,我需要使用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"; Proce
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;
主要是欺骗:
您在一个参数中放置了多个(全部)选项。
当您将命令行节点this
传递给shell时,它将this
和this
作为单独的参数传递给节点,这就是node希望接收它们的方式ProcessBuilder
不像shell那样将字符串拆分为单独的参数,您必须这样做:
ProcessBuilder Pb = new ProcessBuilder("node",filePath,
"-m", "resources/WetterBerich",
"--bg_content", "resources/logo.png");
PS:对工作目录使用/usr/bin
通常不是一个好主意
ProcessBuilder Pb = new ProcessBuilder("node",filePath,
"-m", "resources/WetterBerich",
"--bg_content", "resources/logo.png");