我正在尝试使用 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 进行交互?
嗯,这很愚蠢。我忘了在 stdin的 ls 命令后面写一个换行符。它似乎无需取消缓冲即可工作。