Извлечение вывода 'rsync' с помощью обратного вызова nodejs child_process.exec
В настоящее время я не могу получить rsync
вывод, когда я вызываю nodejs child_process.exec
с функцией обратного вызова, как в этом фрагменте:
var sys = require('sys'),
exec = require('child_process').exec;
cmd = 'rsync -rpz test/test-files/one.txt jloos@test.mygnia.de:~/remote-test/a/b/'
exec(cmd, function(error, stdio, stderr) {
sys.print('s: ' + stdio + '\n');
sys.print('e: ' + stderr + '\n');
});
Я думаю, что это связано с определенным поведением rsync
, rsync
общается со своим коллегой через терминал. Так как я могу получить сообщения от rsync
если вообще возможно?
Когда я использую cmd = 'ls -la'
Я получаю ожидаемый результат.
Спасибо
1 ответ
Часто stdout буферизируется, когда программа не работает в виртуальном терминале. Во многих языках есть модуль pty, который заставит программу вести себя так, как будто она работает в терминале.
Это обеспечивает эту функциональность для NodeJ; https://github.com/chjj/pty.js
Помните, что rsync может писать множество специальных символов или использовать что-то вроде ncurses для предоставления сообщений о состоянии обновления, что может затруднить работу с выходными данными.