不知道为什么这不起作用,如果我运行一个简单的命令,如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());
});
答案 0 :(得分:0)
我认为问题是lftp缓冲了它的输出。
要解决此问题,您需要使用unbuffer(http://expect.sourceforge.net/example/unbuffer.man.html)将输出直接发送到stdout。