2017-09-01 1 views
0

In Python 2 war es einfach, eine temporäre Datei zu erstellen und darauf zuzugreifen. In Python 3 scheint dies jedoch nicht mehr der Fall zu sein. Ich bin verwirrt, wie ich zu der Datei komme, die ich mit tempfile.NamedTemporaryFile() erstelle, damit ich einen Befehl darauf aufrufen kann.Python NamedTemporaryFile erscheint leer, auch nachdem Daten geschrieben wurden

Zum Beispiel:

temp = tempfile.NamedTemporaryFile() 
temp.write(someData) 
subprocess.call(['cat', temp.name]) # Doesn't print anything out as if file was empty (would work in python 2) 
subprocess.call(['cat', "%s%s" % (tempfile.gettempdir(), temp.name])) # Doesn't print anything out as if file was empty 
temp.close() 
+0

Works für mich? 'temp.name' gibt mir den richtigen Dateinamen (' "/ var/folders/ck/s38sycld0tvgb5qhmqtf750r0000gn/T/tmp7ejqww3s" ') – L3viathan

+0

Was * genau * meinst du mit" funktioniert nicht "? Das ist keine adäquate Problemspezifikation. Und so wie es aussieht, funktioniert es ganz gut für mich ... –

+4

Okay, ich schätze: Rufen Sie 'temp.flush()' nach dem Schreibanruf auf. Die Daten, die Sie schreiben, sind gepuffert. – L3viathan

Antwort

1

Das Problem ist, mit Spülung. Die Dateiausgabe wird aus Effizienzgründen gepuffert, daher müssen Sie flush es für die Änderungen tatsächlich in die Datei schreiben lassen. Verwenden Sie außerdem einen with Kontext-Manager hier instad:

with tempfile.NamedTemporaryFile() as temp: 
    temp.write(someData) 
    temp.flush() 
    subprocess.call(['cat', temp.name]) 
Verwandte Themen