0

目前,当我使用如下代码段中的回调函数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'我得到了预期的输出。

谢谢

4

1 回答 1

1

当程序不在虚拟终端中运行时,通常会缓冲标准输出。许多语言都有一个 pty 模块,它会诱使程序表现得好像它在终端中运行一样。

这为 NodeJs 提供了该功能; https://github.com/chjj/pty.js

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

于 2012-11-30T23:47:21.367 回答