0

不知道为什么这不起作用,如果我运行一个简单的命令,例如 cmd='ls -all' 然后我会得到输出,但是当我使用它来运行一个需要一些时间才能完成的命令时,我没有得到什么都回来了。

在这个例子中,我使用 lftp 镜像一些文件夹并想要得到回复,如果我从终端运行命令,那么我当然会看到输出,但是使用子进程我什么也得不到:

var childProcess = require('child_process');
var cmd = 'lftp sftp://user:password@somehost -e "mirror -R  --delete --parallel=5 /usr/share/scripts/ /volumes/folders/usr/share/;bye"';

childProcess.exec(cmd, function (error, stdout, stderr) {
    console.log('stdout:'+stdout);
    console.log('stderr:'+stderr);
    console.log('error:'+error);
});

我也尝试了 spawn 方法,也没有返回任何结果:

var spawn = require('child_process').spawn;
var lftp = spawn('lftp',['sftp://user:password@somehost', '-e "mirror -R  --delete --parallel=5 /usr/share/scripts/ /volumes/folders/usr/share/;bye"']);
lftp.stdout.on('data', function(data) {
    console.log(data.toString());

});
4

1 回答 1

0

我认为问题在于 lftp 缓冲了它的输出。

要解决这个问题,您需要使用 unbuffer ( http://expect.sourceforge.net/example/unbuffer.man.html ) 将输出直接发送到标准输出。

于 2013-09-21T12:32:09.627 回答