node下边,用子进程exec执行scp命令。没有stduot输出,求大神们解答
发布于 9 年前 作者 weivea 5290 次浏览 最后一次编辑是 8 年前 来自 问答

如题。

代码如下:

var command = 'scp -r '+Dir+' test230:wwwroot/cdn.sssss.com/webFront/';
    console.log(command);
    child = child_process.exec(command,
      function (error, stdout, stderr) {
        console.log('stdout: ' + stdout);
        if(stderr){
          console.log('stderr: ' + stderr);
        }
        if (error !== null) {
          console.log('exec error: ' + error);
        }
      }
    );
	child.on('close',function (e) {
      console.log('over!');
    })
8 回复

有人遇到过么??

什么版本的 node? 另外手动执行的输出是什么?

@yjhjstz 版本是5.10

手动执行的话,输出传输的每一个文件呀

@yjhjstz 我也是呀, 屏幕快照 2016-05-17 上午10.52.16.png

这个样子

研究了一下:scp 输出时会检查是否运行在terminal 上,http://blog.clay.shep.me/2009/06/showing-scp-progress-using-zenity.html 给出了详细的解释。

但由于 exec的实现用的是 fork ,而不是 forkpty, 故没有输出。 用spawn, 加上 option, {stdio: ‘inherit’} 可以解决问题。@weivea

直接用scp2这个包

@yjhjstz thank you

回到顶部