0

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

我的问题是:我必须做些什么才能使用 node.js 的 child_process 与 lftp 交互?

4

1 回答 1

0

嗯,这很愚蠢。我忘了在 ls 命令到 stdin 之后写一个换行符。它似乎不需要取消缓冲就可以工作。

于 2012-06-01T14:15:13.823 回答