2009-06-26 4 views
2

Ich habe temporäre benannte Dateien mit der tempfile-Bibliotheken NamedTemporaryFile-Methode erstellt. ich ihnen geschrieben haben spült die Puffer, und ich habe sie nicht geschlossen (oder sonst könnten sie gehen weg)Unterprozessmodul: Verwenden der Aufrufmethode mit temporären Objekten

ich das subprocess Modul zu verwenden bin versucht, einige Shell-Befehle diese generierten Dateien mit rufen.

subprocess.call('cat %s' % f.name) schlägt immer fehl, dass die benannte temporäre Datei nicht existiert.

os.path.exists(f.name) gibt immer wahr zurück. Ich kann den Befehl cat für die Datei direkt von der Shell ausführen.

Gibt es einen Grund, warum das Modul subprocess nicht mit temporären Dateien funktioniert?

Gibt es eine Möglichkeit, damit es funktioniert?

Vielen Dank im Voraus.

+0

Ich habe nicht Shell = True verwendet, also habe ich es geändert. Jetzt kommt der Fehler und sagt '/ bin/sh: Keine solche Datei oder Verzeichnis' – Matt

+0

Die Dateien werden auch nicht gelöscht. Ich kann einen weiteren Tab in meinem Terminal öffnen und die Dateien in Ordnung bringen. Wie gesagt, os.path.exists sagt immer noch, dass die Dateien da sind. Es ist etwas mit dem Unterprozessmodul. – Matt

Antwort

1

Verwenden Sie die Option shell = True für den Subprozess?

+0

Ich war dumm, setzen Shell auf True behoben die Fehler, aber es gab eine andere Datei nicht gefunden Fehler, wo die Datei tatsächlich nicht existierte. – Matt

3

Warum machen Sie nicht Ihre NamedTemporaryFile s mit dem optionalen Parameter delete=False? Auf diese Weise können Sie sie sicher schließen und wissen, dass sie nicht verschwinden werden. Verwenden Sie sie anschließend normal und heben Sie die Verknüpfung explizit auf, wenn Sie fertig sind. So wird auch alles plattformübergreifend funktionieren.