Kommando wiederholen
Kommando wiederholen
Klingt ziemlich einfach, darum suche ich auch nach einer möglicht einfachen Lösung.
Möchte mein Kommando immer in gewissen Abständen wiederholen, also z.B.
print "my commando"
soll alle 10 Minuten selbstständig wiederholt werden.
Danke!
Möchte mein Kommando immer in gewissen Abständen wiederholen, also z.B.
print "my commando"
soll alle 10 Minuten selbstständig wiederholt werden.
Danke!
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
Re: Kommando wiederholen
Anonymous hat geschrieben:Möchte mein Kommando immer in gewissen Abständen wiederholen, also z.B. print "my commando" soll alle 10 Minuten selbstständig wiederholt werden.
Hi!
Mit "sleep" vom "time"-Modul kannst du dein Programm eine kurze Zeit warten lassen.
Code: Alles auswählen
import time
for i in range(10):
print "Hallo"
time.sleep(2)
Allerdings wartet dabei dein Programm komplett. Es reagiert in dieser Zeit auf nichts. Wenn du mehr haben willst, dann musst du mit Threads arbeiten oder wie schon von Leonidas aufgezeigt, einen anderen Prozess starten, der deine Aktionen durchführt.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- Damaskus
- Administrator
- Beiträge: 890
- Registriert: Sonntag 6. März 2005, 20:08
- Wohnort: Schwabenländle
Hi,
ungefähr so:
ungefähr so:
Code: Alles auswählen
import gobject
import popen2
import subprocess
startbefehl = "myprog.exe"
frequenz = 10 * 60000
gobject.timeout_add(frequenz, subprocess.Popen(startbefehl))
Hallo Damaskus!
Dein Programm ist zwar ganz nett, nur ist popen2 darin unnötig und gobject wird nicht jeder haben, da gobject ein Modul von PyGTK ist (allerdings habe ich mir auch bei der Frage des OP gedacht, dass das ein Fall für timeout_add() wäre
)
Dein Programm ist zwar ganz nett, nur ist popen2 darin unnötig und gobject wird nicht jeder haben, da gobject ein Modul von PyGTK ist (allerdings habe ich mir auch bei der Frage des OP gedacht, dass das ein Fall für timeout_add() wäre

My god, it's full of CARs! | Leonidasvoice vs Modvoice
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
blackbird hat geschrieben:help(sched)
Hi blackbird!
Nicht schlecht dieses "sched". Super Hinweis! Das kannte ich noch nicht oder ist mir zumindest beim Überfliegen der Module noch nie aufgefallen.

http://docs.python.org/lib/module-sched.html
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Also das ist das was ich bis jetzt habe:
Bis zum print "goes along" komm ich aber nicht.
Muss jetzt den thread im Hinterground laufen lassen, oder?
Code: Alles auswählen
import sched, time
import thread
s=sched.scheduler(time.time, time.sleep)
def print_time(): print "3 seconds"
def print_some_times():
s.enter(3, 1, print_time, ())
s.run()
i= 0
while i == 0:
thread.start_new(print_some_times, ())
time.sleep(3)
print "goes along"
Bis zum print "goes along" komm ich aber nicht.
Muss jetzt den thread im Hinterground laufen lassen, oder?
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
Code: Alles auswählen
import sched, time
sch=sched.scheduler(time.time, time.sleep)
def print_time(suff):
print time.time(), suff
sch.enter(3, 1, print_time, ("Start nach 3 sec.",))
sch.enter(6, 1, print_time, ("Start nach 6 sec.",))
sch.run()
print "Ende"
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mr.hide hat geschrieben:Ganz klar das du nicht bis zum goes along kommst.
Das liegt an der while schleife!
Die termininiert nicht, d.h. nirgends wird das i auf != 0 gesetzt!
Das stimmt schon, aber ich möchte ja auch, dass mein Thread solange weiterläuft, bis mein Programm beendet wird. Ich müsste also meine while-Schleife irgendwie als Hintergrundprozess laufen lassen.
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
Code: Alles auswählen
import time
import thread
import threading
def print_time(suff, e):
for i in range(5):
print time.time(), suff
time.sleep(2)
e.set()
e1 = threading.Event()
e2 = threading.Event()
e1.clear()
e2.clear()
time.sleep(3)
thread.start_new(print_time, ("Start nach 3 sec.", e1))
time.sleep(3)
thread.start_new(print_time, ("Start nach 6 sec.", e2))
print "Warte auf Event 1"
e1.wait()
print "Warte auf Event 2"
e2.wait()
print "Ende"
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5554
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Telfs (Tirol)
- Kontaktdaten:
Anonymous hat geschrieben:aber ich möchte ja auch, dass mein Thread solange weiterläuft, bis mein Programm beendet wird. Ich müsste also meine while-Schleife irgendwie als Hintergrundprozess laufen lassen.
Code: Alles auswählen
import time
import thread
import threading
def print_time(abbruch_event):
while True:
print time.time()
time.sleep(1)
if abbruch_event.isSet():
break
abbruch_event = threading.Event()
thread.start_new(print_time, (abbruch_event,))
time.sleep(10)
abbruch_event.set()
print "Ende"
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
also das klappt schon mal ganz gut so, danke schonmal.
Mein Hauptproblem ist aber immernoch, dass ich den Thread nicht im Hintergrund laufen lassen kann. Also ich möchte, dass print "Ende" erreicht wird und mein thread trotzdem noch weiterläuft.
Also ich möchte meinen Thread im kompletten Programm im Hintergrund ständig laufen lassen und gleichzeitig den Rest des Programms ungestört weiterlaufen lassen.
Meine Ausgabe soll also in deinem Beispiel ungefähr so aussehen:
1136818813.88 Start nach 3 sec.
1136818815.88 Start nach 3 sec.
Warte auf Event 1
1136818816.88 Start nach 6 sec.
1136818817.88 Start nach 3 sec.
1136818818.88 Start nach 6 sec.
Ende
1136818819.88 Start nach 3 sec.
1136818820.88 Start nach 6 sec.
1136818821.88 Start nach 3 sec.
1136818822.88 Start nach 6 sec.
Warte auf Event 2
1136818824.88 Start nach 6 sec.
...
...
Mein Hauptproblem ist aber immernoch, dass ich den Thread nicht im Hintergrund laufen lassen kann. Also ich möchte, dass print "Ende" erreicht wird und mein thread trotzdem noch weiterläuft.
Also ich möchte meinen Thread im kompletten Programm im Hintergrund ständig laufen lassen und gleichzeitig den Rest des Programms ungestört weiterlaufen lassen.
Meine Ausgabe soll also in deinem Beispiel ungefähr so aussehen:
1136818813.88 Start nach 3 sec.
1136818815.88 Start nach 3 sec.
Warte auf Event 1
1136818816.88 Start nach 6 sec.
1136818817.88 Start nach 3 sec.
1136818818.88 Start nach 6 sec.
Ende
1136818819.88 Start nach 3 sec.
1136818820.88 Start nach 6 sec.
1136818821.88 Start nach 3 sec.
1136818822.88 Start nach 6 sec.
Warte auf Event 2
1136818824.88 Start nach 6 sec.
...
...
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder