java - 从 Java 运行节点命令行模块
问题描述
我正在尝试在我的程序生成的 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 中的节点模块?
解决方案
推荐阅读
- r - 如果值低于阈值,则与相邻组聚合
- reactjs - 套接字 io on 方法未执行
- c++ - c++中的分段错误(奇怪的行为)
- c# - 在提交事务实体框架之前检查条目是否存在
- blazor - 在 Blazor 应用程序中,关注点分离和单一职责原则的最佳实践是什么?
- python - 使用 @jit 时出现奇怪的 Numba 0.50 行为
- nix - Nix 如何从 users.extraUsers 引用用户名?
- typescript - 为什么使用 jasmine 对 Node typescript 项目进行 Karma 单元测试会显示包含依赖项的覆盖范围?
- python-3.x - 不断从 request.get() 获取损坏的 .pdf
- android - 处理完深层链接后如何返回浏览器?Android & iOS(反应原生)