【发布时间】:2012-06-01 13:54:42
【问题描述】:
我正在尝试使用 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 的标准输入。它输出通常的“[Resolving host address...]”内容,但不输出 ls 命令的输出。
我的问题是:我必须做些什么才能使用 node.js 的 child_process 与 lftp 交互?
【问题讨论】:
-
您为什么要尝试与交互式 FTP 客户端交互? npmjs.org 列出了节点的几个 FTP 模块。
-
它们都不支持通过显式 TTL/SSL、SFTP 等进行的 FTP。我认为使用 child_process 包装现有的 FTP 客户端可能更容易。
标签: node.js stdout child-process unbuffered lftp