使用nodejs child_process.exec回调获取'rsync'输出

时间:2012-11-30 23:10:56

标签: node.js stdout rsync stderr

目前,当我使用回调函数调用nodejs rsync时,我无法获取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 个答案:

答案 0 :(得分:1)

当程序未在虚拟终端中运行时,通常会缓冲stdout。 许多语言都有一个pty模块,它会欺骗程序,就好像它在终端中运行一样。

这提供了NodeJ的功能; https://github.com/chjj/pty.js

请记住,rsync可能会编写大量特殊字符或使用ncurses之类的东西来提供更新状态消息,这可能会使输出更加困难。