Node.js 节点执行scp,在控制台中显示进度
我在节点应用程序中使用scp命令将文件传输到服务器; 我无法在控制台中显示传输过程中的进度,如果您在shell中手动使用“scp”,它通常会这样做; 这是我的密码:Node.js 节点执行scp,在控制台中显示进度,node.js,scp,spawn,Node.js,Scp,Spawn,我在节点应用程序中使用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@serve
//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)
我不是一个节点程序员,所以我不能提供一个完整的例子来说明如何做到这一点。您可以尝试通过
expect
程序运行scp
。它能够分配PTY并通过它们运行子进程。或者,节点似乎有一个“tty”模块,它可能能够执行您想要的操作。讨论如何通过tty从节点运行vim
;你也许可以使用同样的方法。好的,现在我了解更多;节点js有一个tty的核心模块;不幸的是,直到现在我还没能得到想要的结果……你找到解决办法了吗?我也在努力解决同样的问题!