使lftp写入stdout而不必先关闭进程

时间:2012-06-01 13:54:43

标签: node.js stdout child-process unbuffered lftp

我正在尝试使用child_process将lftp程序包装在node.js应用程序中。问题是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了。它输出通常的“[解析主机地址...]”内容,但不输出ls命令的输出。

我的问题是:我需要做些什么才能使用node.js'child_process与lftp进行交互?

1 个答案:

答案 0 :(得分:0)

嗯,这很愚蠢。我忘了在ls命令之后写一个新行到stdin。它似乎无需缓冲即可工作。