programm soll warten, bis eine datei existiert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Meeper
User
Beiträge: 15
Registriert: Donnerstag 14. Februar 2013, 17:41

hi,
ich versuche, ein programm zu schreiben, das an einer bestimmten stelle stoppt, und erst weiter macht, wenn eine datei existiert.
also z.b. sowas in der art:

Code: Alles auswählen

import os
while os.path.exists("pfadname")==False:
    #todo
etc.

ich hab auch schon irgendwo diese idee/möglichkeit gefunden:

Code: Alles auswählen

import os

while True:
    if os.path.exists(pfadname)==True:
        break
auch wenn ich beim zweiten nicht weiß, ob das nicht irgendwie unsicher ist :o

ich hab jedenfalls beide ausprobiert (bei der ersten möglichkeit hab ich verschiedenes bei "#todo" hingeschrieben, z.b. "pass", "time.sleep(5)" oder ich hab es als methode geschrieben, die ich dann erneut aufgerufen habe - nicht sehr elegant :/ ), aber es hat nichts funktioniert.
kann mir vllt. jemand nen tipp geben? :)

PS: das komplette programm ruft ein php-skript auf, welches anschließend eine datei mit dem pfadnamen erzeugt. mit dem inhalt dieser datei soll anschließend weiter gearbeitet werden, sobald sie vorhanden ist.

kann mir jemand helfen? ;)
thx
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

wenn ein Programm auf ein anderes wartet indem es die Existenz einer Datei prüft, hast Du schon einen schweren Designfehler.
1. ein drittes Programm könnte eine Datei mit gleichem Namen erzeugen, löschen, etc.
2. das Programm könnte abbrechen und nie eine Datei schreiben.
3. Soll der Inhalt weiterverarbeitet werden, könnte er noch nicht (komplett) geschrieben sein,
wenn das erste Programm ihn schon lesen will.
usw.

Mit den Informationen, die Du gegeben hast, kann man nicht sagen, warum was auch immer nicht „funktioniert“.
BlackJack

@Meeper: Warum wartest Du nicht einfach bis das PHP-Skript durchgelaufen ist? Dazu gibt es auf den `subprocess.Popen`-Objekten eine `wait()`-Methode. Wenn man keine grosse Kontrolle über das externe Programm braucht, kann man auch einfach `subprocess.call()` verwenden. Das blockiert automatisch bis das externe Programm durchgelaufen ist.
Meeper
User
Beiträge: 15
Registriert: Donnerstag 14. Februar 2013, 17:41

danke ihr zwei,
hat funktioniert! :)
ja, ich hatte das mit dem subprocess.call() vorher zu umständlich gemacht, weil ich mich mit der methode nicht so gut auskannte und deshalb mist gebaut habe... ich hab mich jetzt nochmal genauer drüber informiert, und wie gesagt, es funkt ;)

lg
Antworten