我想将来自AWS S3的大型视频文件传输到Popen
's stdin
,这是从Python的角度来看的'文件类对象'.此代码作为AWS Lambda函数运行,因此这些文件不适合内存或本地文件系统.此外,我不想在任何地方复制这些巨大的文件,我只想流式传输输入,动态处理和流输出.我已经有处理和流输出位工作了.问题是如何获得输入流作为Popen pipe
.
更新:我整理了一个基于注释调用StreamingBody.read(amt = chunk_size)的短程序.该程序读取一些输入文件(一个mp4视频)并被卡住,可能是因为数据的消费者(ffmpeg)实际上没有运行,或者它的STDIN缓冲区填充并且整个混乱停止了?
我可以访问S3存储桶中的文件:
import boto3 s3 = boto3.resource('s3') response = s3.Object(bucket_name=bucket, key=key).get() body = response['Body']
body
是botocore.response.StreamingBody
这样的:
{
u'Body':
我打算用body
这样的东西:
from subprocess import Popen, PIPE Popen(cmd, stdin=PIPE, stdout=PIPE).communicate(input=body)[0]
但当然body
需要转换为类似文件的对象.问题是如何?
用于从StreamingBody中读取二进制数据StreamBody.read()
.你得到一个二进制字符串.