CNode

node下边,用子进程exec执行scp命令。没有stduot输出,求大神们解答

问答
Wweivea发布于10 年前最后回复10 年前8 回复6311 浏览0 收藏

如题。

代码如下:

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)

W
weivea#1·10 年前

有人遇到过么??

Y
yjhjstz#2·10 年前

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

W
weivea#3·10 年前
引用 yjhjstz什么版本的 node? 另外手动执行的输出是什么?

@yjhjstz 版本是5.10

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

W
weivea#4·10 年前

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

这个样子

Y
yjhjstz#5·10 年前

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

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

D
dayuoba#6·10 年前

直接用scp2这个包

W
weivea#8·10 年前
引用 dayuoba直接用scp2这个包

@dayuoba 谢谢

参与回复
登录后即可参与回复。登录