我正在尝试使用 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 交互?