【问题标题】:nodejs execute scp showing progress in consolenodejs执行scp在控制台中显示进度
【发布时间】:2015-06-13 20:50:22
【问题描述】:

我在节点应用程序中使用 scp 命令将文件传输到服务器; 传输时我无法在控制台中显示进度,如果您在 shell 中手动使用“scp”,通常会这样做; 这是我的代码:

//require system modules
var spawn = require('child_process').spawn;

console.log("copy begins...");

var executor = spawn("scp", ["-r", ".tmp/app.tar.gz", "user@server:/home/user"]);

executor.stderr.on('data', function(data) {
    console.log(data.toString());
});

executor.stdout.on('data', function(data) {
    console.log(data.toString());
});

executor.stdout.on('end', function(data) {
    console.log("copied");
});

executor.on('close', function(code) {
    if (code !== 0) {
        console.log('Failed: ' + code);
    }
});

这只是登录控制台“复制开始...”和“已复制”,但没有别的; 是否有可能在执行过程中获取 scp 命令的输出并将其发送到控制台?

【问题讨论】:

  • 您找到解决方案了吗?我也在努力解决同样的问题!

标签: node.js scp spawn


【解决方案1】:

scp 仅在其标准输出是 TTY 时才输出它所谓的“进度表”:

$ scp localhost:/etc/passwd . 
passwd                                        100% 5253     5.1KB/s   00:00    
$ scp localhost:/etc/passwd . | cat
$ 

因此,您的程序必须将 scp 进程的标准输出安排为 TTY 或 PTY(伪 tty)。

我不是节点程序员,所以我无法为您提供如何做到这一点的完整示例。您可以尝试通过expect 程序运行scp。它能够分配 PTY 并通过它们运行子进程。或者,节点似乎有一个“tty”模块,它可能能够做你想做的事。 This question 讨论通过 tty 从节点运行 vim;您也许可以使用相同的方法。

【讨论】:

  • 好的,现在我明白了; node js 有一个 tty 的核心模块;不幸的是,直到现在我才能够得到想要的结果......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多