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:
Aber natürlich muss body
in ein dateiähnliches Objekt konvertiert werden. Die Frage ist wie?
Tags und Links python python-2.7 boto3 stdin