【问题标题】:Making lftp write to stdout without having to close the process first让 lftp 写入标准输出而无需先关闭进程
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2018-09-18
    • 2013-06-24
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多