我在节点应用程序中使用scp命令将文件传输到服务器; 我无法在控制台中显示传输过程中的进度,因为“scp”通常会在shell中手动使用它; 这是我的代码:
//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命令的输出并将其发送到控制台?
答案 0 :(得分:3)
scp
仅输出所谓的“进度表”:
$ scp localhost:/etc/passwd .
passwd 100% 5253 5.1KB/s 00:00
$ scp localhost:/etc/passwd . | cat
$
所以你的程序必须安排scp进程的标准输出为TTY或PTY(伪tty)。
我不是节点程序员,因此我无法为您提供如何执行此操作的完整示例。您可以尝试通过scp
计划运行expect
。它能够分配PTY并通过它们运行子进程。或者,似乎节点有一个'tty'模块,它可能能够做你想要的。 This question讨论了从节点到tty运行vim
的问题。你也许可以使用相同的方法。