最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用Java运行nodejs

运维笔记admin4浏览0评论

使用Java运行nodejs

使用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时,它将thisthat作为单独的参数传递给节点,这就是节点期望接收它们的方式。 ProcessBuilder不会像shell一样将字符串拆分为单独的参数,您必须这样做:

ProcessBuilder Pb = new ProcessBuilder("node",filePath, 
  "-m", "resources/WetterBerich",
  "--bg_content", "resources/logo.png");

PS:通常将/usr/bin用于您的工作目录不是一个好主意。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论