Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点执行scp,在控制台中显示进度_Node.js_Scp_Spawn - Fatal编程技术网

Node.js 节点执行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

我在节点应用程序中使用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)


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

好的,现在我了解更多;节点js有一个tty的核心模块;不幸的是,直到现在我还没能得到想要的结果……你找到解决办法了吗?我也在努力解决同样的问题!