2016-01-29 2 views
1

Мне нужно использовать узел для генерации разностей некоторых файлов. Я пробовал diff npm package, и хотя это отлично работает, он намного менее эффективен, чем версия diff, которую вы найдете в/usr/bin /.Как использовать nodejs childprocess exec для запуска команды unix 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.

Я пробовал различные формы цитирования вещей.

Все остальные команды, которые я пробовал, используя одни и те же файлы, сработали. cat, wc, и т.д.

Любые мысли?

ответ

1

Welp, я отвечаю на свой вопрос.

Команда 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); 
}); 

работает как очарование.

+0

Тот же выпуск здесь, я тестирую 'stderr' intead – EloHailwidis

Смежные вопросы