Verwendung von botocore.response.StreamingBody als Standard-PIPE

8

Ich möchte große Videodateien von AWS S3 in Popen 's stdin pipen, was aus Pythons Sicht ein' dateiähnliches Objekt 'ist. Dieser Code wird als AWS-Lambda-Funktion ausgeführt, sodass diese Dateien nicht in den Arbeitsspeicher oder das lokale Dateisystem passen. Außerdem möchte ich diese riesigen Dateien nirgends kopieren, ich möchte nur die Eingabe streamen, im laufenden Prozess verarbeiten und die Ausgabe streamen. Ich habe bereits die Verarbeitungs-und Streaming-Output-Bits arbeiten. Das Problem besteht darin, wie Sie einen Eingabestream als Popen pipe erhalten.

Update: Ich habe ein Kurzprogramm zusammengestellt, das StreamingBody.read (amt = chunk_size) basierend auf einem Kommentar aufruft. Das Programm liest etwas von der Eingabedatei (ein mp4-Video) und bleibt stecken, möglicherweise weil der Verbraucher der Daten (ffmpeg) nicht wirklich läuft, oder vielleicht sein STDIN-Puffer füllt und das ganze Durcheinander zum Stillstand kommt?

>

Ich kann auf eine Datei in einem S3-Bucket zugreifen:

%Vor%

body ist ein botocore.response.StreamingBody , das 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 body in etwa so zu verwenden:

%Vor%

Aber natürlich muss body in ein dateiähnliches Objekt konvertiert werden. Die Frage ist wie?

    
Mike Slinn 02.01.2016, 20:10
quelle

1 Antwort

7

Um Binärdaten von StreamingBody zu lesen, verwenden Sie StreamBody.read() . Sie erhalten eine binäre Zeichenfolge.

    
Michael 12.01.2016 16:22
quelle

Tags und Links