...soll warten, bis...

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
Pü-Ton
User
Beiträge: 67
Registriert: Donnerstag 8. Mai 2008, 07:52

Donnerstag 29. Mai 2008, 09:30

Hi Schlangenfreunde,

leider weiß ich nicht genau nach was ich suchen soll, deshalb ein neuer Thread:

Ich starte über die COM-Schnittstelle ein Programm. Innerhalb dieses Programms läuft jetzt ein File ab (ist unwichtig...) In VBscript gibt es jetzt ein Befehl, der sagt, dass das Prog warten soll, bis das File zu Ende ist.

hier der VBs-Code

Code: Alles auswählen

While IntegrationObject.IsRunning
    Wscript.Sleep 2000
Wend
das ist auch vergleichbar mit der DoEvents() Anweisung.


Also es geht nur um die xxx.Sleep 2000 Anweisung !!!

Gibt es sowas auch in Python, wenn ja, wie nennt man sowas oder wie wendet man sowas an???
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Donnerstag 29. Mai 2008, 10:02

Pü-Ton hat geschrieben:Ich starte über die COM-Schnittstelle ein Programm. Innerhalb dieses Programms läuft jetzt ein File ab (ist unwichtig...)
meinst du: du startest ein fremdes skript? wenn ja, schau dir mal subprocess an.

Code: Alles auswählen

While IntegrationObject.IsRunning
    Wscript.Sleep 2000
Wend
wenn man kann, sollte man sowas imho nicht mit whiles lösen. Zur syncronisation gibt eine ganze Menge verfahren: locks, semaphores, etc.
Also es geht nur um die xxx.Sleep 2000 Anweisung !!!
Gibt es sowas auch in Python, wenn ja, wie nennt man sowas oder wie wendet man sowas an???
gibt es in python, aber ist für dein Problem vmtl nicht das richtige. (Auch in vb gibts vmtl bessere Lösungen)
Pü-Ton
User
Beiträge: 67
Registriert: Donnerstag 8. Mai 2008, 07:52

Donnerstag 29. Mai 2008, 10:11

Hallo Keppla,

erstmal danke.
Ein anderes Script wird nicht gestartet, sondern es läuft eine Prozedur innerhalb des über die COM-Schnittstelle gestarteten Progs ab.

Das passt schon mit der " IntegrationObject.IsRunning" Anweisung. Das ist also nicht das Problem.

Sondern ich brauch die Syntax/Befehlszeile, die die "Wscript.Sleep 2000" Anweisung in Python wiedergibt.
--> Wie lautet "Wscript.Sleep 2000" in Python.

Sonst nix. Also keine Sync o.ä. --- das macht COM !!!
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Donnerstag 29. Mai 2008, 10:29

Pü-Ton hat geschrieben:Hallo Keppla,
erstmal danke.
Ein anderes Script wird nicht gestartet, sondern es läuft eine Prozedur innerhalb des über die COM-Schnittstelle gestarteten Progs ab.
Versteh ich nicht so ganz. Könntest du deinen Aufbau etwas genauer beschreiben? COM-Schnittstelle im Sinne von
http://de.wikipedia.org/wiki/Component_Object_Model
oder wie
http://de.wikipedia.org/wiki/EIA-232
?
Das passt schon mit der " IntegrationObject.IsRunning" Anweisung. Das ist also nicht das Problem.
eleganter wäre, wenn die IntegrationObject-api in python ein "wait" anbieten würde, wie z.B. subprocess das tut.
Sondern ich brauch die Syntax/Befehlszeile, die die "Wscript.Sleep 2000" Anweisung in Python wiedergibt.
nein, du möchtest zwei Prozesse Syncronisieren. Du möchtest im startenden Prozess warten, bis ItegrationObject.isRunning false ist.
--> Wie lautet "Wscript.Sleep 2000" in Python.
im modul threading gibts ne methode namens sleep. Aber bitte, tu dir selbst den gefallen, und poste mal genauer. Diese while not event: sleep(0.01) -strategien sind absolut nicht das gelbe vom ei, wenn du auf ein Ereignis warten möchtest.
Sonst nix. Also keine Sync o.ä. --- das macht COM !!!
scheinbar ja nicht, denn du versuchst doch, es selber zu machen.
Pü-Ton
User
Beiträge: 67
Registriert: Donnerstag 8. Mai 2008, 07:52

Donnerstag 29. Mai 2008, 14:50

Also, von mir aus ist es ein Sync...

Habs dann mit time.sleep(sec) realisiert, weil es echt am einfachsten und absoltut funktionsfähig ist.

Code: Alles auswählen

while integration.IsRunning():
    time.sleep(3) 
Trotzdem Danke
lunar

Donnerstag 29. Mai 2008, 18:33

Ich rate dir aber trotzdem, dich nach einer anderen Lösung umzusehen. Busy-Polling ist nicht gerade elegan ;)
Antworten