Wie zu verwenden botocore.Antwort.StreamingBody als stdin PIPE

Möchte ich Pfeife großen video-Dateien von AWS S3 in Popen's stdin, die aus Python-Sicht ein "file-like-Objekt'. Dieser code wird ausgeführt, wie eine AWS Lambda-Funktion, so dass diese Dateien nicht in den Speicher passt oder auf das lokale Dateisystem. Auch glaube ich nicht wollen, kopieren Sie diese große Dateien von überall, ich will nur den stream der input -, Prozess-on-the-fly, und streamen Sie die Ausgabe. Ich habe bereits die Bearbeitung und streaming-output bits arbeiten. Das problem ist, so erhalten Sie einen input-stream als Popen pipe.

Update: ich habe einen kurz-Programm aufruft StreamingBody.Lesen(amt=chunk_size), basierend auf einen Kommentar. Das Programm liest einige der input-Datei (mp4-video) und klemmt, möglicherweise, weil der konsument der Daten (ffmpeg), die eigentlich gar nicht laufen, oder vielleicht seine STDIN-Puffer füllt und das ganze Chaos zum Stillstand?

Kann ich Zugriff auf eine Datei in einem S3-bucket:

import boto3
s3 = boto3.resource('s3')
response = s3.Object(bucket_name=bucket, key=key).get()
body = response['Body']  

body ist ein botocore.response.StreamingBody die wie folgt aussieht:

{
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'}}

Ich beabsichtige zu verwenden body so etwas wie dieses:

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

Aber natürlich body muss umgewandelt werden in eine Datei-wie-Objekt. Die Frage ist, wie?

  • Siehe meine Antwort in diesem Zusammenhang thread.
  • Siehe meine Antwort auf das thread.
InformationsquelleAutor Mike Slinn | 2016-01-02
Schreibe einen Kommentar