Hallo ,
ist es möglich ein Skript unter Windows zu programmieren
dass eine gegebene Anwendung immer um 18UHr startet?
Wenn ja ...könnte mir jemand ein wenig helfen ich bin da etwas ueberfordert...
Danke
Skript das Anwendung immer um 18Uhr startet?
Möchtest du mit einem Script, externe Anwendungen ab einer bestimmten Uhrzeit starten oder Möchtest du dass im Script ab einer bestimmten Uhrzeit eine Funktion ausführt?
Für ersteres wäre der Taskplaner tatsächlich besser (wozu das rad neu erfinden, es sei den es ist Bestandteil deines Programms).
Für das Zweite weiß ich keine Absolut gute lössung aber Spontan würde mir folgendes einfallen:
Du, machst dir erstmal eine while schleife die unendlich läuft und als Abbruchbedingung zb. ein bestimmtes Wort hat das du übergeben kannst. So, nun brauchst du die Funktion time aus der Library time (also time.time()), das dir, richtig formatiert, die aktuelle Uhrzeit in einer Variablen Speichert. Mit einer if abfrage fragst du dann mit der Variablen ab, ob die von dir gewünschte Uhrzeit erreicht ist. Wenn ja dann wird halt Funktion XYZ ausgeführt
Das ganze kannst du natürlich auch dazu benutzen um ein Programm auszuführen. 
Ich schreib mal nachher ein kleines Beispiele Script.
lg
Für ersteres wäre der Taskplaner tatsächlich besser (wozu das rad neu erfinden, es sei den es ist Bestandteil deines Programms).
Für das Zweite weiß ich keine Absolut gute lössung aber Spontan würde mir folgendes einfallen:
Du, machst dir erstmal eine while schleife die unendlich läuft und als Abbruchbedingung zb. ein bestimmtes Wort hat das du übergeben kannst. So, nun brauchst du die Funktion time aus der Library time (also time.time()), das dir, richtig formatiert, die aktuelle Uhrzeit in einer Variablen Speichert. Mit einer if abfrage fragst du dann mit der Variablen ab, ob die von dir gewünschte Uhrzeit erreicht ist. Wenn ja dann wird halt Funktion XYZ ausgeführt


Ich schreib mal nachher ein kleines Beispiele Script.
lg
Code: Alles auswählen
import time
tm = time.strftime("%H:%M:%S", time.localtime() )
print tm
x=0
while True:
tm = time.strftime("%H:%M:%S", time.localtime() )
if tm == "11:23:30":
print "es ist %s uhr" %tm
break
####
# Dieser abschnitt ist eine Vorsichtsmaßname,
# damit das ganze nicht in einer Endlosschleife endet ^^
#
if x == 1000000:
print "Vorzeitiger Abbruch"
break
x += 1
#
#
####
Allso das if x == 1000000: habe ich jetzt eingebaut damit es nicht in einer Endlosschleife endet

Zeile 7 hohlt die aktuelle Uhrzeit. In Zeile 8 wird dann überprüft ob die Uhrzeit die gewünscht ist und führt dann das nachfolgende aus. in diesem Fall findet hier nur ein print statt und beendet die schleife. Dort könnte man jetzt ein Programm starten, oder ne Funktion ausführen oder sonstwas.
Naja, das Problem ist aber nun das man das Programm auch irgendwie beenden können muss. Ich weiß leider nicht wie man mit python shortcuts definieren kann auf das dann das script reagiert.


Falls du das Script ausprobieren willst, muss du un Zeile 8 eine gewünschte Uhrzeit angeben und dann Zeile 16-18 löschen ^^
BTW: Falls einer weiß wie man shortcuts definieren kann in Python dann bitte posten. Würde mich jetzt auch interessieren, dann kann ich mal aus dem Beispielskript ein vernümftiges machen

lg
das ist Bestandteil von Windows und damit kann man halt Tasks palnen. Also einstellen das zur eine bestimmten Uhrzeit ein Programm ausgeführt wird z.B.Mati hat geschrieben:[...]
was ist denn ein taskplaner ?

EDIT:
Mir Fällt gerade ein, das es besser wäre so was in einen eigenen thread zu packen. Also in einem thread läuft dann die while schleife mit den rest ab und in einem anderen halt der Rest der Applikation, damit das Programm noch reagieren kann und nicht von der Endlosschleife blockiert wird

Im Modul os gibt es z.B. den befehl execl, execle usw. mit den man ein Programm starten kann. (Kuck mal mit pydoc welcher für dich in frage kommt. Hab dafür bis her keine Verwendung gehabt und daher weiß ich ich nicht welcher der passende wäre)
Aber mal was wichtiges: Es muss aber eine Abbruchbedingungen herrschen in der schleife, damit es nicht ins endlose läuft. Das heißt konkret, das man per taste zb. Strg+C drückt und das das Script erkännt und dann die schleife beendet. Leider weiß ich nicht wie man so was realisiert.
Und dann was ganz wichtiges: Das script von mir ist anscheinend nicht zu gebrauchen!! Ich habs noch mal laufen lassen und bemerke gerade das die while schleife die ganze Prozessorlast beansprucht (100%)
Aus irgendwelchen grund zeiht das soviel
Sorry, ich wusste nicht das eine while schleife soviel Performance beansprucht. Naja, deshalb ist mein Ansatz nicht zu gebrauchen 
Aber nun hast du mich auf eine gute Idee gebracht und will es nun auch wissen wie man das lösen kann
Ich mache mich mal daran das web zu durchsuchen xD
lg
Aber mal was wichtiges: Es muss aber eine Abbruchbedingungen herrschen in der schleife, damit es nicht ins endlose läuft. Das heißt konkret, das man per taste zb. Strg+C drückt und das das Script erkännt und dann die schleife beendet. Leider weiß ich nicht wie man so was realisiert.
Und dann was ganz wichtiges: Das script von mir ist anscheinend nicht zu gebrauchen!! Ich habs noch mal laufen lassen und bemerke gerade das die while schleife die ganze Prozessorlast beansprucht (100%)



Aber nun hast du mich auf eine gute Idee gebracht und will es nun auch wissen wie man das lösen kann

Ich mache mich mal daran das web zu durchsuchen xD
lg
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Mati!Mati hat geschrieben:eine gegebene Anwendung immer um 18UHr startet?
Verwende den Taskplaner (Geplante Tasks) aus der Systemsteuerung.
Wenn das Python-Programm ständig läuft und von sich heraus den Job automatisch ausführen soll, dann kannst du auch mit dem "sched"-Modul etwas anfangen.
Siehe: http://docs.python.org/lib/module-sched.html
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.
Hi gerold.
Hab das gerade getestet und das läuft super
Sry für OT. aber weißt du weshalb eine while schleife soviel Performance beansprucht? Irgendwie müssen die das im sched Modul auch mit einer schleife realisiert haben oder hängt es davon ab was genau die schleife macht? In meine oberen Beispiel wird da ja nur addiert und das kann doch nicht soviel Performance kosten oder
lg
Hab das gerade getestet und das läuft super

Sry für OT. aber weißt du weshalb eine while schleife soviel Performance beansprucht? Irgendwie müssen die das im sched Modul auch mit einer schleife realisiert haben oder hängt es davon ab was genau die schleife macht? In meine oberen Beispiel wird da ja nur addiert und das kann doch nicht soviel Performance kosten oder

lg
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Vorweg: Ich habe den Eindruck, dass der Taskplaner fuer Matis Vorhaben doch ganz gut geeignet ist.
Kann man natuerlich noch anpassen, je nachdem, wie genau man die Zeitabfrage braucht.
Edit: Man, habe ich lange fuer dieses Posting gebraucht...
Man sollte in die while-Schleife noch ein time.sleep(...) einbauen. Und in jedem Fall bei der Abbruchbedinung keine '=='-Abfrage machen, sondern pruefen, ob der angegebene Zeitpunkt schon verstrichen ist, fuer den Fall, dass man den Zeitpunkt, dass es genau 18:00:00 Uhr ist, verpasst. So in etwa:XtraNine hat geschrieben:Und dann was ganz wichtiges: Das script von mir ist anscheinend nicht zu gebrauchen!! Ich habs noch mal laufen lassen und bemerke gerade das die while schleife die ganze Prozessorlast beansprucht (100%)
Code: Alles auswählen
while time.strftime("%H:%M%S", time.localtime()) < '18:00:00':
time.sleep(1)
Edit: Man, habe ich lange fuer dieses Posting gebraucht...
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi XtraNine!XtraNine hat geschrieben:In meine oberen Beispiel wird da ja nur addiert und das kann doch nicht soviel Performance kosten oder?
Wenn du dem Computer sagst, dass er etwas tun soll, dann tut er es. Und das so schnell wie möglich. Wenn du ihm in einer Schleife sagst, dass er etwas tun soll, dann tut er das, was du ihm gesagt hast, so schnell wie möglich und ständig.
Nur, wenn du dem Computer mal zwischendurch eine Pause gönnst (time.sleep()), dann wird er zwischendurch mal unterbrechen.
Ständig am Werkeln:
Code: Alles auswählen
while True:
print "Hallo"
Code: Alles auswählen
while True:
print "Hallo"
time.sleep(0.5)
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.
Ach ja *ich mich auf den Kopf klatsch*, Mensch stimmt ja, hast ja recht. Man muss den ja auch ne kurze pause gönnen, damit er nicht die ganze rechen zeit "klaut".
thx & lg xtra
P.S.: So, nun muss ich nur noch was finden, womit man Tastenkombinationen im script registrieren kann, damit das script darauf reagieren kann, um eine Abbruchbedingung für die while schleife zu haben. Dan habe ich schon mal ein shedluer, der auch auf Uhrzeiten reagieren kann und nicht nur auf clocks:)
thx & lg xtra
P.S.: So, nun muss ich nur noch was finden, womit man Tastenkombinationen im script registrieren kann, damit das script darauf reagieren kann, um eine Abbruchbedingung für die while schleife zu haben. Dan habe ich schon mal ein shedluer, der auch auf Uhrzeiten reagieren kann und nicht nur auf clocks:)
Zufälligerweise hab ich auch mal sowas gebraucht. bei mir wird ne Wavedatei abgespielt, aber das kannst Du ja Deinen Erfordernissen anpassen.
Das Script spielt Montag bis Freitag um 9.15 den einen Sound ab und Montag bis Donnerstag einen anderen. Brauch ich für meine Geschäftspausen
Gruß
alpha
Code: Alles auswählen
import time
import winsound
def gettime():
YYYY,MM,DD,hh,mm,ss,dw,dy,x = time.localtime()
# kommentar
if ss == int(0) and mm == int(0) and hh == int(12) and dw < 4:
winsound.PlaySound("c:\scripts\SPEECH\Pause.wav",0)
if ss == int(0) and mm == int(15) and hh == int(9):
winsound.PlaySound("c:\scripts\SPEECH\SpielUnterbrochen.WAV",0)
print "Pause-Script started!"
while 1:
time.sleep(0.8)
gettime()

Gruß
alpha
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich versteh irgendwie immer noch nicht, warum hier so eine Abneigung gegenüber dem Taskplaner (oder so sachen wie cron) herrscht. Sämltliche hier gezeigten Programme ließen sich viel eleganter mit dem Taskplaner/Cron lösen.
Always use the right tool for the task.
P.S.: Prozesse würde ich über das Modul Subprocess starten, das nur so nebenbei.
Always use the right tool for the task.
P.S.: Prozesse würde ich über das Modul Subprocess starten, das nur so nebenbei.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wenn das Script in der Wartezeit keine Funktion erfüllt außer zu warten, braucht man doch gar keine While-Schleife. Man berechnet die Differenz x zwischen aktueller Zeit und gewünschter Startzeit und wartet die Zeit mit sleep(x).
MfG
HWK
MfG
HWK
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich bevorzuge saubere, wenn auch in diesem Fall nicht-pythonische Lösungen. Ich kann zwar deinen Punkt verstehen, aber das Rad neu erfinden finde ich eben nicht so wahnsinnig interessant und wenig zielführend (klar, manchmal ist sowas auch nötig).alpha hat geschrieben:Wir sind aber ein Pythonforum.. also lösen wir alles mit Python![]()
.. und wenns nur aus Spass ist![]()
Was aber praktisch ist:
Wenn man ein Programm hat und in diesem etwas um eine bestimmte Uhrzeit passiert, was mit dem programm auch zu tun hat. Zum Beispiel dass ein Programm das die Fahrpläne der öffentlichen Verkehrsmittel an bestimmten Uhrzeiten Meldungen bingt, dass bald die letzte Verbindung der Linie X abgeht. Aber um einfach so andere Programme zu starten -> cron. Läuft sowieso immer und verschwendet daher nicht unnötige Prozessorzyklen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Genua so sehe ich das auchLeonidas hat geschrieben:[...]
Was aber praktisch ist:
Wenn man ein Programm hat und in diesem etwas um eine bestimmte Uhrzeit passiert, was mit dem programm auch zu tun hat. Zum Beispiel dass ein Programm das die Fahrpläne der öffentlichen Verkehrsmittel an bestimmten Uhrzeiten Meldungen bingt, dass bald die letzte Verbindung der Linie X abgeht. Aber um einfach so andere Programme zu starten -> cron. Läuft sowieso immer und verschwendet daher nicht unnötige Prozessorzyklen.

Aber wie du shcon sagst: Sobald man diese Funktionalität für interen vorgänge im script braucht, ist es schon nicht schlecht wenn man weiß wie man sowas macht

BTW: Danke für den tipp mit Subprocess. Werde mir das mal ansehen und ich glaube ich muss mal langsam anfange alle Docstrings von alle Modulen zu lesen, damit ich weiß was Python so alles als Standard so bietet

BTW2: Passend zum Thema: Bin immer noch der Überzeugung, das diese schleife mit sleep, abfrage, etc besser in einen eigenen thread rein sollte, damit es nicht das ganze Programm blockiert. Also praktisch einen Thread für die Hauptaufgaben die immer bereit stehen müssen und dann einen für diese abfrage die im Hintergrund läut und dann bei erreichter Zeit irgendwas macht.