0

cmd='ls -all' などの単純なコマンドを実行すると、出力が返されますが、これを使用して完了するまでに時間がかかるコマンドを実行すると、取得できません。何も返されませんでした。

この例では、lftp を使用していくつかのフォルダーをミラーリングし、応答を取得したいと考えています。ターミナルからコマンドを実行すると、もちろん出力が表示されますが、子プロセスを使用すると何も得られません。

var childProcess = require('child_process');
var cmd = 'lftp sftp://user:password@somehost -e "mirror -R  --delete --parallel=5 /usr/share/scripts/ /volumes/folders/usr/share/;bye"';

childProcess.exec(cmd, function (error, stdout, stderr) {
    console.log('stdout:'+stdout);
    console.log('stderr:'+stderr);
    console.log('error:'+error);
});

spawn メソッドも試しましたが、そこから何も返されませんでした:

var spawn = require('child_process').spawn;
var lftp = spawn('lftp',['sftp://user:password@somehost', '-e "mirror -R  --delete --parallel=5 /usr/share/scripts/ /volumes/folders/usr/share/;bye"']);
lftp.stdout.on('data', function(data) {
    console.log(data.toString());

});
4

1 に答える 1

0

問題は、lftp がその出力をバッファリングすることだと思います。

これを回避するには、unbuffer ( http://expect.sourceforge.net/example/unbuffer.man.html ) を使用して出力を直接 stdout に送信する必要があります。

于 2013-09-21T12:32:09.627 に答える