gpt4 book ai didi

node.js - nodejs 执行 scp 在控制台中显示进度

转载 作者:太空宇宙 更新时间:2023-11-03 21:49:55 27 4
gpt4 key购买 nike

我在 Node 应用程序中使用 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 命令的输出并将其发送到控制台?

最佳答案

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

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

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

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

关于node.js - nodejs 执行 scp 在控制台中显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29522395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com