gpt4 book ai didi

python - 如何将 botocore.response.StreamingBody 用作标准输入 PIPE

转载 作者:太空狗 更新时间:2023-10-29 20:58:25 24 4
gpt4 key购买 nike

我想将大型视频文件从 AWS S3 传输到 Popenstdin,从 Python 的角度来看,这是一个“类文件对象”。此代码作为 AWS Lambda 函数运行,因此这些文件不适合内存或本地文件系统。此外,我不想将这些巨大的文件复制到任何地方,我只想流式传输输入、即时处理并流式传输输出。我已经让处理和流输出位正常工作。问题是如何获取作为 Popen 管道 的输入流。

更新:我整理了一个 short program根据评论调用 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': <botocore.response.StreamingBody object at 0x00000000042EDAC8>,
u'AcceptRanges': 'bytes',
u'ContentType': 'video/mp4',
'ResponseMetadata': {
'HTTPStatusCode': 200,
'HostId': 'aAUs3IdkXP6vPGwauv6/USEBUWfxxVeueNnQVAm4odTkPABKUx1EbZO/iLcrBWb+ZiyqmQln4XU=',
'RequestId': '6B306488F6DFEEE9'
},
u'LastModified': datetime.datetime(2015, 3, 1, 1, 32, 58, tzinfo=tzutc()),
u'ContentLength': 393476644,
u'ETag': '"71079d637e9f14a152170efdf73df679"',
u'Metadata': {'cb-modifiedtime': 'Sun, 01 Mar 2015 01:27:52 GMT'}}

我打算像这样使用body:

from subprocess import Popen, PIPE
Popen(cmd, stdin=PIPE, stdout=PIPE).communicate(input=body)[0]

当然body需要转换成类文件对象。问题是如何?

最佳答案

要从 StreamingBody 读取二进制数据,请使用 StreamBody.read()。你得到一个二进制字符串。

关于python - 如何将 botocore.response.StreamingBody 用作标准输入 PIPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com