Seite 1 von 1

Variablen zur Laufzeit ändern

Verfasst: Freitag 12. September 2008, 11:46
von api
Hallo zusammen,

ich suche nach einer Möglichkeit, während das Programm läuft, eine Variable zu ändern.

Die Situation ist folgende: Nehmen wir einmal an, ich hätte im Programm eine Pause von 10 Minuten eingebaut. Nun möchte ich aber während das Programm läuft diesen Wert auf 5 Sekunden herabsetzen.

Wie kann ich das bewerkstelligen?

CU,
API

Re: Variablen zur Laufzeit ändern

Verfasst: Freitag 12. September 2008, 11:52
von numerix
api hat geschrieben:Die Situation ist folgende: Nehmen wir einmal an, ich hätte im Programm eine Pause von 10 Minuten eingebaut. Nun möchte ich aber während das Programm läuft diesen Wert auf 5 Sekunden herabsetzen.

Wie kann ich das bewerkstelligen?
Das hängt davon ab, wie du die "Pause" realisiert hast. Je nach dem geht es gar nicht oder eben doch - dazu müsstest du mal entsprechenden Code zeigen.

Verfasst: Freitag 12. September 2008, 11:55
von Leonidas
Versuch mal den ``=`` Operator.

Code: Alles auswählen

dauer = 10
# ...
dauer = 5
# PROFIT!
SCNR, aber das bot sich bei der Frage echt an.

Verfasst: Freitag 12. September 2008, 12:09
von api
Hi Leonidas,

der war gut... :-))

Aber das Beispiel passt schon so..

Code: Alles auswählen

pause = 10
#...
# und dann zwischendurch
pause = 5
Aber wenn ich das in der Form mache, läuft das Prg doch trotzdem mit dem Wert 10 weiter, oder etwa nicht??

Das wird doch erst bei einem Neustart aktiv..

Verfasst: Freitag 12. September 2008, 12:13
von Lonestar
api hat geschrieben:
Aber wenn ich das in der Form mache, läuft das Prg doch trotzdem mit dem Wert 10 weiter, oder etwa nicht??

Das wird doch erst bei einem Neustart aktiv..
warum probierst du es nich einfach aus ?

Code: Alles auswählen

pause = 10
print pause 
#...
# und dann zwischendurch
pause = 5
print pause 


Verfasst: Freitag 12. September 2008, 13:14
von numerix
Ich glaube, was du willst, ist ungefähr das hier:

Code: Alles auswählen

from time import time # fuer Windows besser: clock
from random import random

dauer = 10
t0 = time()
while time()-t0<dauer:
    zahl = random()
    print zahl
    if dauer>1 and zahl<0.1:
        print "Jetzt noch 1 Sekunde ..."
        dauer = 1

Verfasst: Freitag 12. September 2008, 13:50
von api
Hallo numerix,

danke für deine Antwort, aber ich glaube, ich habe mich wohl recht unverständlich ausgedrückt. Deshalb jetzt mal mein Problem anhand der realen Situation:

Ich habe ein Programm, welches ein Logfile analysiert. Bei einem möglichen Fehler - zu erkennen anhand eines Logfile-Eintrags - wird eine Mail generiert und an verschiedene Leute geschickt. Diese Überprüfung findet alle 4 Sekunden statt - soll ja schließlich aktuell sein.
Wenn es nun zu einem Fehlerfall kommt, bzw. zu mehreren Fehlern (kurz aufeinander folgend), dann würde ich gerne - ohne das Prg zu beenden und es neu zu starten - eine Variable neu setzen, die die Zeit beinhaltet, die das Prg zwischen 2 Läufen wartet (eben diese 4 Sekunden).
Unter UNIX kann ich zu diesem Zweck die Variable, welche in einer Konfig-Datei steht, einfach neu laden (bzw. die Konfig-Datei). Soll heissen, in dieser Konfig-Datei steht:

...
pause=4
...

Nun ändere ich den Wert zur Laufzeit ab in:

...
pause=200
...


In dem Prg gibt es in einer while-Schleife den Befehl:
sleep $pause

(das wäre jetzt ein Shell-Prg)


Wie aber realisiere ich das unter Python?

Kann ich dort auch Variablen in eine Konfig-Datei auslagern und diese evtl. 1mal pro Minute einladen? Oder wie macht man sowas?

Verfasst: Freitag 12. September 2008, 13:55
von n4p

Code: Alles auswählen

time.sleep(sec)
Den wert kannst du ja nach der Ausführung regelmäßig aus einer Datei auslesen und anpassen.

Verfasst: Freitag 12. September 2008, 14:02
von api
Ok, klar das könnte man machen. Aber wenn ich jetzt viele verschiedene Variablen zur Laufzeit änderbar machen möchte, so ist es ziemlich aufwendig, dafür extra Routinen zu schreiben.

In einem UNIX-Shell-Prg kann ich einfach eine Konfig-Datei einbinden und diese regelmäßig aufrufen. Da stehen dann einfach Variablen mit Werten drin und diese werden nach jedem Aufruf neu gesetzt, bzw. behalten ihren alten Wert, wenn ich nichts geändert habe.

Kann man in Python sowas vielleicht in eine Funktion oder Klasse einbinden?

Verfasst: Freitag 12. September 2008, 14:07
von DasIch
api hat geschrieben:Kann man in Python sowas vielleicht in eine Funktion oder Klasse einbinden?
Natürlich.

Verfasst: Freitag 12. September 2008, 14:19
von Leonidas
api hat geschrieben:Ok, klar das könnte man machen. Aber wenn ich jetzt viele verschiedene Variablen zur Laufzeit änderbar machen möchte, so ist es ziemlich aufwendig, dafür extra Routinen zu schreiben.
Ich bin ja immer wieder erstaunt wie oft so etwas nützlich sein kann, aber Cellulose könnte etwas für dich sein. Oder, wenn es simpler sein soll, eben die Klasse.