我有一台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无法使用它。
答案 0 :(得分:0)
答案很简单,尽管我不明白为什么会发生,所以对此的任何投入都是很好的。
根据node.js文档subprocess.stdio
是(默认情况下)具有3个管道的数组:subprocess.stdin
,subprocess.stdout
和subprocess.stderr
。自然,它们分别带有索引0-2。我的问题是我指向了错误的索引,因此我不需要执行subprocess.stdio[2]
(代表标准输出),而不是做subprocess.stdio[1]
(代表标准错误)。现在,AWS输出将显示在控制台上。
我没有赶上的原因是因为我使用的ffmpeg具有相同的代码(首先执行),并且出于某种原因使用了索引2。这是令我困惑的部分。