AWS S3 cp不显示进度输出到控制台[Node.js]

时间:2019-01-31 22:19:56

标签: node.js amazon-web-services amazon-s3

我有一台Node.js服务器,正在其中处理AWS S3上传。我的生成代码如下:

const command = `aws s3 --region us-west-2 cp ${filePath} ${s3Path} --recursive`;

const subprocess = spawn(command, {
    stdio: 'pipe',
    shell: true
});

subprocess.stdio[2].on('data', data => {
    const ss = data.toString('utf-8');
    logger.info(ss); //I have a logger
});

问题是AWS不会向stdout数据事件返回任何数据。在查看了S3 cp的文档之后,我以为我可能一直在压制日志,但事实并非如此。有人知道发生了什么吗?

==============

更新1

我在命令提示符下手动键入了命令,并看到了所需的进度输出。仍然不确定为什么Node.js无法使用它。

1 个答案:

答案 0 :(得分:0)

答案很简单,尽管我不明白为什么会发生,所以对此的任何投入都是很好的。

根据node.js文档subprocess.stdio是(默认情况下)具有3个管道的数组:subprocess.stdinsubprocess.stdoutsubprocess.stderr。自然,它们分别带有索引0-2。我的问题是我指向了错误的索引,因此我不需要执行subprocess.stdio[2](代表标准输出),而不是做subprocess.stdio[1](代表标准错误)。现在,AWS输出将显示在控制台上。

我没有赶上的原因是因为我使用的ffmpeg具有相同的代码(首先执行),并且出于某种原因使用了索引2。这是令我困惑的部分。