Seite 1 von 2

Skript das Anwendung immer um 18Uhr startet?

Verfasst: Montag 6. November 2006, 08:54
von Mati
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

Verfasst: Montag 6. November 2006, 09:04
von Whitie
Hallo,
wie wäre es denn mit dem Taskplaner ?

Gruß, Whitie

Verfasst: Montag 6. November 2006, 10:15
von sape
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

Verfasst: Montag 6. November 2006, 10:47
von Mati
Hallo, danke für eure rege Hilfe
also das skript wird einmal gestartet und läuft immer...und es soll z.B einfach um 18 Uhr nur unter windows z.b winamp starten....

was ist denn ein taskplaner ? :)

Verfasst: Montag 6. November 2006, 11:31
von sape

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
    #
    #
    ####
Naja...

Allso das if x == 1000000: habe ich jetzt eingebaut damit es nicht in einer Endlosschleife endet ;) Egal, das beispiel sol ja nur zu dienen wie das gehen könnte.

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. :oops: Deshalb habe ich oben auch eine Abbruchbedingung definiert damit es nicht in einer Endlosschleife endet :oops: ^^

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

Verfasst: Montag 6. November 2006, 11:32
von sape
Mati hat geschrieben:[...]
was ist denn ein taskplaner ? :)
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. ;)

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 ;)

Verfasst: Montag 6. November 2006, 12:02
von Mati
danke :)

ehm wo starte ich jetzt die anwendung?
irgendwie über system() ?

jetzt muss ich nur noch herausfinden wie ich daas bewerkstellige mit dem thread....*grmpf

Verfasst: Montag 6. November 2006, 12:16
von sape
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%) :oops: 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 :D

Ich mache mich mal daran das web zu durchsuchen xD

lg

Re: Skript das Anwendung immer um 18Uhr startet?

Verfasst: Montag 6. November 2006, 12:18
von gerold
Mati hat geschrieben:eine gegebene Anwendung immer um 18UHr startet?
Hallo Mati!

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
:-)

Verfasst: Montag 6. November 2006, 12:25
von sape
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

Verfasst: Montag 6. November 2006, 12:36
von Rebecca
Vorweg: Ich habe den Eindruck, dass der Taskplaner fuer Matis Vorhaben doch ganz gut geeignet ist.
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%)
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:

Code: Alles auswählen

while time.strftime("%H:%M%S", time.localtime()) < '18:00:00':
    time.sleep(1)
Kann man natuerlich noch anpassen, je nachdem, wie genau man die Zeitabfrage braucht.

Edit: Man, habe ich lange fuer dieses Posting gebraucht...

Verfasst: Montag 6. November 2006, 12:41
von gerold
XtraNine hat geschrieben:In meine oberen Beispiel wird da ja nur addiert und das kann doch nicht soviel Performance kosten oder?
Hi XtraNine!

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"
Bei jedem Durchlauf eine halbe Sekunde Pause:

Code: Alles auswählen

while True:
    print "Hallo"
    time.sleep(0.5)
``sched`` macht intern wahrscheinlich auch nichts anderes, als in einer Schleife kurz zu warten, prüfen ob die Zeit reif ist und dann mit der Schleife weiter zu machen.

lg
Gerold
:-)

Verfasst: Montag 6. November 2006, 13:11
von sape
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:)

Verfasst: Montag 6. November 2006, 13:13
von sape
hi Rebecca.

Hab erst gerade dein Post gelesen. Super Idee! :)

thx & lg xtra

Verfasst: Montag 6. November 2006, 16:14
von alpha
Zufälligerweise hab ich auch mal sowas gebraucht. bei mir wird ne Wavedatei abgespielt, aber das kannst Du ja Deinen Erfordernissen anpassen.

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()
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 :D

Gruß
alpha