0

child_process を使用して、node.js アプリケーションで lftp プログラムをラップしようとしています。問題は、lftp がその出力を stdout に書き込まないため、node.js でその出力をキャッチできないことです。サンプルコード:

var proc = require('child_process').spawn('lftp', ['-p', port, '-u', username + ',' + password, host]);

proc.stdout.on('data', function (data) {
    console.log('stdout:', data.toString('utf-8'));
});

proc.on('exit', function (code) {
    console.log('process exited with code ' + code);
});

proc.stdin.write('ls');
// proc.stdin.end();

lftp 子プロセスの stdin.end() を呼び出す行のコメントを外すと、ls コマンドからの出力が正常に端末に表示されます。そうしないと、プロセスが単にハングし、何も出力されません。

unbuffer も使用してみましたが、lftp の stdin に書き込むことができなくなったようです。通常の「[Resolving host address...]」を出力しますが、ls コマンドからの出力は出力しません。

私の質問は: node.js の child_process を使用して lftp と対話できるようにするには、どうすればよいですか?

4

1 に答える 1

0

うーん、これはだめでした。stdin の ls コマンドの後に改行を書き忘れていました。unbuffer を必要とせずに動作するようです。

于 2012-06-01T14:15:13.823 に答える