首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java运行nodejs

使用java运行nodejs
EN

Stack Overflow用户
提问于 2019-10-08 16:49:09
回答 1查看 61关注 0票数 2

我需要使用java运行一些node.js程序

我的代码如下所示

代码语言:javascript
复制
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;

但是我得到了这个错误

代码语言:javascript
复制
module.js:549
throw err;
^
EN

回答 1

Stack Overflow用户

发布于 2019-10-08 18:40:26

主要是被复制的:Cannot ProcessBuilder to execute command for ffmpeg -i shortWav.wav -af silenceremove=1:0:-50dB shortWavCued.mp3

您正在将多个(全部)选项放入一个参数中。

当您向shell提供命令行node this that时,它会将thisthat作为单独的参数传递给node,这就是node期望接收它们的方式。ProcessBuilder不像shell那样将字符串拆分成单独的参数,您必须这样做:

代码语言:javascript
复制
ProcessBuilder Pb = new ProcessBuilder("node",filePath, 
  "-m", "resources/WetterBerich",
  "--bg_content", "resources/logo.png");

PS:使用/usr/bin作为你的工作目录通常不是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58283002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档