从Java运行节点命令行模块

时间:2019-12-24 16:13:45

标签: java node.js npm command-line stdout

我正在尝试在程序生成的SVG字符串上运行SVGO。 SVGO与npm install -g svgo一起全局安装,通常可以在命令行上运行,如下所示:

cat image.svg | svgo -i - -o - > image-opt.svg

我正在使用标准输入和输出。 Java中的等效项是:

Process process = new ProcessBuilder("svgo", "-i -", "-o -").start();

BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));

stdin.write("<svg>...</svg>");
stdin.flush();

Scanner scanner = new Scanner(stdout);
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

我收到一个java.io.IOException: The pipe is being closed错误。如果不刷新,则不会输出,stdout.readLine()返回null。

svgo.cmd文件是位于%APPDATA%/npm中的脚本,由npm生成。

如何使用Java中的节点模块?

0 个答案:

没有答案