0

我正在尝试使用 nodejs 和命令下载大量文件exec,简化如下:

var cmd = 'wget -O output.csv URL';
var child = exec(cmd, function(err) {
  console.log('DONE');
});

但是,回调在文件实际通过 下载之前被触发wget,导致文件包含垃圾,如“��0O�6D�1n�]v�����#�”。一旦 wget 完成,不应该触发回调吗?在命令行上运行相同的命令大约需要 5 秒,因为文件有几个 MB。

顺便说一句:我没有使用该request模块,因为它速度较慢,而且我遇到了发射器监听器问题(EventEmitter memory leak detected. 11 listeners added)。

谢谢!

4

1 回答 1

2

这将涉及一些调试。

您能否尝试将您的脚本运行为:

var cmd = 'wget -O output.csv URL';
var child = exec(
  cmd,
  function (error, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
  }
);

看看 stdout 和 stderr 说什么会很有趣。

对,你向我提供了你的stderr内容:

http://productdata.zanox.com/exportservice/v1/rest/22791753C32335607.csv?ticket=BC4B91472561713FD43BA766542E9240AFDD01B95B123E40B2C0375E3A68C142

命令行获取的这个 URL 缺少 & 符号(&字符)之后的所有内容。这表明转义有问题。

要解决此问题,请尝试替换\&\\\&.

于 2013-07-12T13:29:58.910 回答