目前,当我使用回调函数调用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'
时,我得到了预期的输出。
由于
答案 0 :(得分:1)
当程序未在虚拟终端中运行时,通常会缓冲stdout。 许多语言都有一个pty模块,它会欺骗程序,就好像它在终端中运行一样。
这提供了NodeJ的功能; https://github.com/chjj/pty.js
请记住,rsync可能会编写大量特殊字符或使用ncurses之类的东西来提供更新状态消息,这可能会使输出更加困难。