2016-07-13 26 views
1

Ich habe Probleme beim Schreiben von asynchronem E/A-Programm. Was ich versuche zu erreichen ist: dump json Daten in eine temporäre Datei, so kann ich dann Subprozess verwenden, um ein Archiv dieser Datei (mit JSON-Daten) zu erstellen. Ich habe jedoch herausgefunden, dass ich versuche, eine leere Datei von tempfile.NamedTemporatyFile zu tarieren.Twisted I/O-Archivdateien

serialized_data = {'a': 1} 

    temp_file = tempfile.NamedTemporaryFile(dir='.', prefix='serialized_', suffix='.json') 
    temp_file.write(json.dumps(serialized_data)) 

    arch_name = temp_file.name + '.tar.gz' 
    tar_cmd_args = ['tar', '-czf', arch_name, temp_file.name] 
    subprocess.call(tar_cmd_args) 
    #d = threads.deferToThread(subprocess.call, tar_cmd_args) 

Ich versuche, I/O, so viel wie möglich zu vermeiden, da will ich nicht Rückrufkette blockieren und ich muss sicher sein, diese Vorgänge Thread-sicher sind. Oder ist eine andere Art der Lösung für mein Problem? Ich möchte wirklich json.dump(serialized, file_name)

[Bearbeiten]

vermeiden Während temp_file.close() verursacht: tar: /home/bartosz/Documents/serialized_mnaFP_.json: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors

Die Lösung war nicht die Datei zu schließen, aber zu spülen. temp_file.flush()

create & read from tempfile

Antwort

0

Schließen Sie die Datei, nachdem Sie es schreiben und vor dem sekundären Thread starten.

+0

Jetzt bin immer ich: 'tar: Entfernen von führenden/von Mitglied names' ' tar: /home/bartosz/Documents/serialized_mnaFP_.json: Can not stat: Datei oder directory' 'tar: Verlassen mit Fehlerstatus aufgrund vorheriger Fehler " und es befindet sich keine Datei im Archiv, nicht einmal eine leere wie zuvor – heniek