我想從AWS S3管大的視頻文件轉換成Popen
的stdin
,這是從Python的角度來看一個‘類文件對象’。此代碼作爲AWS Lambda函數運行,因此這些文件不適合內存或本地文件系統。另外,我不想在任何地方複製這些龐大的文件,我只想流式輸入,即時處理,並輸出流。我已經有處理和流輸出位工作。問題是如何獲得輸入流爲Popen pipe
。如何使用botocore.response.StreamingBody作爲標準輸入PIPE
更新:我把一個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
轉換爲文件類對象。問題是如何?
看到我在這個相關的[線程](https://stackoverflow.com/questions/7624900/how-can-i-use-boto-to-stream-a-file-out-of-amazon-s3 -to-Rackspace公司-cloudfiles /)。 – smallo
看到我對此相關的[線程]的響應(https://stackoverflow.com/questions/7624900/how-can-i-use-boto-to-stream-a-file-out-of-amazon-s3-to -rackspace-cloudfiles /)。 – smallo