2017-03-29 4 views
0

Szenario: Python-Code, der die Anzahl der Besucher durch ein Tor überprüft. abhängig von dieser Nummer baue ich den nächsten Job.Python 2.7: Speichern Sie den Variablenwert dauerhaft, auch wenn ich die Sitzung das nächste Mal ausführen

EDIT. 1:

#

file1 :( First Run diese Datei zählt die Anzahl der Besucher, die standardmäßig ankommen 3 in meinem Fall ist nun ausführen ich die Datei und ich fand, dass kamen Besucher .. 4 Hin und exportieren Sie die gleichen, die Besucherzahlen als 4 zur gleichen Zeit Datei2 und drucken die Besucher Wert auf 4 jetzt in Datei1 geändert wird

nun wird der zweite Lauf:

jetzt in file1 Besucher Wert ist 4 und es ist einchecken g wenn Besucher> 4 sind, jetzt, wenn die Anzahl 4 ist, dann exportiere ich dasselbe in Datei2, wenn der Zählwert 5 ist, dann exportiere ich dasselbe in Datei2 und behalte den Wert als 5 ** Anzahl der Besucher hängt vollständig von der URL ab) ## ##

datasource = "www.PPrestraunt.com/personsentered" 
data = len(datasource) #gives me the live value of the number of persons entered 
if(visitors > 3): 
    bottles = data 
    visitors = bottles 
    print bottles 
else: 
    visitors = 3 

dies oben Code in eine andere Datei importiert wird, die die Arbeits

file2 hat:

from file1 import visitors 
number_of_bottles = visitors 
print number_of_bottles 

ich Setup haben das gleiche in jenkins Job, so dass es alle 5 Minuten erstellt. Im obigen Code ändert sich der Wert der Besucher nicht jedes Mal, wenn ich den Code ausführen Wert bleibt 3, obwohl die Zahl auf 4 erhöht wird.

erwarteter Fall: Wenn Wert ist mehr als 3 Wert sollte in Next beibehalten werden zu Sitzung und die, wenn die Bedingung nun für den neuen Wert ex überprüfen sollte.. (if (Besucher> 4)

jede Hilfe dankbar ist

+0

https://en.wikipedia.org/wiki/Persistence_(computer_science) –

+0

Kurz gesagt, Sie müssen diesen Wert speichern und laden, wenn Sie den Prozess ausführen. Also vielleicht eine Datenbank oder vielleicht eine einfache Datei, wenn es nur eine Nummer ist. Wahrscheinlich ist es gut, mit einem tragbaren Textserialisierungsformat wie JSON zu bleiben. –

+0

Kannst du erklären, wie ich das erreichen kann, habe ich versucht mit der Datenbankoption als sqllite (aber es ist nicht wert für eine kleine Datei wie diese) eine andere Option, was Sie sagten, ist Json, die ich keine Ahnung haben können Sie ein bisschen Einblick in das über den Ansatz. – Alex

Antwort

0

Wie, was @juanpa schrieb

Hier ist ein kleines Programm, das erhöht einen Zähler, Sie können es auf Ihren Code

anpassen
import os 
data_file = "lower_bound.txt" 
is_file_empty = (os.path.isfile(data_file)==False) or (os.stat(data_file).st_size == 0) 
if (is_file_empty): 
    with open(data_file,"w") as f: 
     f.write("3"); 


datasource = "www.PPrestraunt.com/personsentered" 
data = len(datasource) #gives me the live value of the number of persons entered 
lower_bound = 0; 
with open(data_file,"r") as f: 
    lower_bound = int(f.read()); 

if (visitors>lower_bound): 
    bottles = data 
    visitors = bottles 
    print bottles 
    // @Alex either lower_bound+=1; or lower_bound = visitors not sure what you want 
else: 
    visitors = lower_bound; 
with open(data_file,"w") as f: 
    f.write(str(lower_bound)); 
print lower_bound,"is the new minimum and",visitors,"is the current visitor count"; 
+0

Danke, hier habe ich die Referenz als 3 sollte es nicht in der Zahl verringern, wenn die Personen zwei sind, sollte ich noch die Flaschen als 3 haben, so dass die Logik oben implementieren können falsch positive geben. Idee ist, wenn die Zahl mehr als 3 ist Es sollte den Wert beibehalten, so dass das nächste Mal, wenn ich den Code erneut ausführen sollte es nie von 3 abnehmen, aber wenn Wert erhöht wird, angenommen 4 es sollte die Bedingung ab 4 überprüfen. – Alex

+0

Wenn also der neue Wert 10 ist, aber die Besucher unter 10 sind, sollten Besucher 3 sein? –

+0

Nein, meine Quell-URL 'datasource = "www.PPrestraunt.com/personsentered"' kann mir einen Wert geben, der auch 10 oder 2 sein kann. aber wenn der Wert 2 wird die Bedingung 'if (Besucher> 3)' sollte von 3 nur nicht von 2 überprüfen. – Alex

0

Dies wäre ein großartiges Szenario für das Beizen. Sie können Daten (in Ihrem Fall ein Zähler) Pickles und diese Daten speichern, abrufen es dann zu einem späteren Zeitpunkt:

import pickle 

def your_code(counter): 
    # Replace this with your code and use the counter variable. 
    # Every time you execute the code it will increase 
    # e.g. 3, 4, 5, 6 .... 
    print(counter) 

try: 
    counter = pickle.load(open('counter.pckl', 'rb')) 
    counter += 1 
    pickle.dump(counter, open('counter.pckl', 'wb')) 
    # Now execute your code with the new counter: 
    your_code(counter) 

except: 
    counter = 3 
    pickle.dump(counter, open('counter.pckl', 'wb')) 
    # Execute your code for the first time. This will only happen once. 
    your_code(counter) 

Das erste Mal, wenn Sie diesen Code ausführen, wird der Zähler auf 3. Sie initialisiert werden kann dann Ihren vorhandenen Code als Funktion aufrufen und diesen Zähler verwenden. Wenn Sie das Skript ausführen, erhöht sich der Zähler und Ihr Code wird die neue Version des Zählers verwenden: e.g. 3, 4, 5, 6.

+0

Danke, aber ich möchte nicht die Ausführung von Code zählen, eher die Daten innerhalb – Alex

+0

Also jedes Mal, wenn Sie den Code ausführen die Anzahl der Besucher wird sich ändern? Welche Daten möchten Sie zwischen den Läufen erhalten? –

+0

Ja, das hängt von meiner Quellen-URL ab, wenn in file1 die Besucherdaten sich auf einen neuen Wert ändern (Basiswert = 3, angenommen, es ändert sich zu 4), dann sollte der Wert beibehalten werden, wenn ich file2 ausführe, nimmt er den Wert 4 und nicht 3. – Alex

Verwandte Themen