Variablen zur Laufzeit ändern

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
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Freitag 12. September 2008, 11:46

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 12. September 2008, 11:52

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. September 2008, 11:55

Versuch mal den ``=`` Operator.

Code: Alles auswählen

dauer = 10
# ...
dauer = 5
# PROFIT!
SCNR, aber das bot sich bei der Frage echt an.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Freitag 12. September 2008, 12:09

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..
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Freitag 12. September 2008, 12:13

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 

Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 12. September 2008, 13:14

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
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Freitag 12. September 2008, 13:50

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?
n4p
User
Beiträge: 55
Registriert: Dienstag 10. Juni 2008, 11:05

Freitag 12. September 2008, 13:55

Code: Alles auswählen

time.sleep(sec)
Den wert kannst du ja nach der Ausführung regelmäßig aus einer Datei auslesen und anpassen.
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Freitag 12. September 2008, 14:02

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?
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Freitag 12. September 2008, 14:07

api hat geschrieben:Kann man in Python sowas vielleicht in eine Funktion oder Klasse einbinden?
Natürlich.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. September 2008, 14:19

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten