Извлечение вывода '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 для предоставления сообщений о состоянии обновления, что может затруднить работу с выходными данными.

Другие вопросы по тегам