2016-07-18 20 views
2

ich eine tmp-Datei mithilfe erschaffe:Python schreibt in mkstemp (Datei)

from tempfile import mkstemp 

ich in dieser Datei zu schreiben versuchen:

tmp_file = mkstemp() 
file = open(tmp_file, 'w') 
file.write('TEST\n') 

Tat schließe ich die Datei und es tue aber die richtige, wenn ich zu Katze versuchen, die tmp-Datei, stillt es empty..It sieht einfach, aber ich weiß nicht, warum es nicht funktioniert, irgendwelche Erklärungen?

+0

Ja, ich mache es. file.close(), ich habe sogar versucht, die fd zu bekommen und schließen Sie es mit os.close (fd) –

Antwort

7

mkstemp() gibt ein Tupel mit einem Dateideskriptor und einen Pfad. Ich denke, das Problem ist, dass Sie auf den falschen Weg schreiben. (Sie schreiben in einen Pfad wie '(5, "/some/path")'.) Ihr Code sollte in etwa so aussehen:

from tempfile import mkstemp 

fd, path = mkstemp() 

# use a context manager to open the file at that path and close it again 
with open(path, 'w') as f: 
    f.write('TEST\n') 

# close the file descriptor 
os.close(fd) 
+0

Nun habe ich versucht, beide zu verwenden, wenn ich path = mkstemp tun(), ist es nur den Pfad der Datei zurückgibt. Und es schafft immer noch die Datei auf dem richtigen Weg, deshalb denke ich, dass es nicht das Problem ist. –

+0

@SteevenBrunner Ich sehe nicht, wie das sein könnte. Wenn Sie 'path = mkstemp(); print (Pfad) ', was ist die Ausgabe? Ich bin mir ziemlich sicher, dass es ein Tupel sein muss. – smarx

+0

@SteevenBrunner Welche Version von Python verwenden Sie? (Vielleicht ältere Versionen haben ein anderes Verhalten.) – smarx