如何使用Node.js的childprocess exec来运行Unix diff命令?

3

我需要使用Node来生成一些文件的差异。 我已经尝试了diff npm包,虽然它很好用,但是它的性能比在/usr/bin/中找到的diff版本要差得多。

当我尝试使用exec运行diff命令时,它总是出错。

var childProcess = require('child_process');

var cmd = "diff /path/to/file1.txt /path/to/file2.txt";
childProcess.exec(cmd, (error, stdout, stderr) => {
  if(error) {
    console.log(error);
  } else {
    console.log(stdout);
  }
});

输出结果:
{ [Error: Command failed: /bin/sh -c diff /path/to/file1.txt /path/to/file2.txt
]
  killed: false,
  code: 1,
  signal: null,
  cmd: '/bin/sh -c diff /path/to/file1.txt /path/to/file2.txt' }

如果我自己在命令行上运行该命令,它就可以正常工作。

我尝试了运行 /usr/bin/diff 而不是只运行 diff

我尝试了各种不同形式的引用。

我尝试了每一个使用完全相同文件的其他命令,比如 catwc 等等都可以正常工作。

有什么想法吗?

1个回答

5

好的,我来翻译一下。

嗯,我正在回答自己的问题。

diff命令会在找到差异时返回失败的退出代码。因此,console.log(stdout)调用永远不会被执行。 如果忽略错误,一切都可以正常工作。

var childProcess = require('child_process');
var cmd = "diff /path/to/file1.txt /path/to/file2.txt";
childProcess.exec(cmd, (error, stdout, stderr) => {
  console.log(stdout);
});

运行得非常好。

同样的问题在这里,我测试 stderr 而不是 stdout - EloHailwidis
这非常有帮助,谢谢。 如果你想让代码在出现差异并返回失败退出代码时继续运行,我将差异检查包装在try/catch块中,以便脚本可以继续运行。 - Alex L
如果您在 Promise 中使用它,则需要添加 resolve() 以解决 Promise。 - Maciek Rek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接