0

現在、次のスニペットのようなコールバック関数を使用してrsyncnodejsを呼び出しているときに、出力をフェッチできません。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'); 
});

これはの特定の動作が原因だと思いますrsyncrsync端末を介して相手と通信します。では、可能であれば、どうすればからメッセージを取得rsyncできますか?

使用するcmd = 'ls -la'と、期待どおりの出力が得られます。

ありがとう

4

1 に答える 1

1

多くの場合、stdoutは、プログラムが仮想端末で実行されていないときにバッファリングされます。多くの言語には、端末で実行されているかのようにプログラムをだまして動作させるptyモジュールがあります。

これにより、NodeJにその機能が提供されます。 https://github.com/chjj/pty.js

rsyncは多くの特殊文字を書き込んだり、ncursesのようなものを使用して更新ステータスメッセージを提供したりする可能性があることに注意してください。これにより、出力の操作がより困難になる可能性があります。

于 2012-11-30T23:47:21.367 に答える