Python3:
Podstawową ideą mojego skryptu jest ciągłe uruchamianie skryptu Pythona, dopóki parametr pliku nie zostanie ustawiony na True (używając innego skryptu Pythona lub ręcznie zmieniając go w innym terminalu). Próbuję użyć pętli while do uruchomienia wartości klucza dict na True (lub Ok .. cokolwiek). Aby moja pętla while w Pythonie kontynuowała wykonywanie pętli, sprawdzając wartość klucza dict.
Pętla działa, ale nie zatrzymuje się po zmianie parametru (przez inny terminal).
import time
import sys
import json
conffile = (eval(open('conf.ini', 'r').read()))
check = conffile.get('state')
while check == 'True':
print("starting app")
time.sleep(10)
check = conffile.get('state') ##output of this check variable is 'True'
sys.exit()
cat conf.ini
{"state": "True"}
Wynik:
starting app
starting app
starting app ......for every 10secs
W międzyczasie zmieniłem klucz conf.ini dick state
na False
z drugiego terminala, więc oczekuję, że pętla while powinna się zepsuć, ale nie przerywa pętli.
Próbowałem while check:
, while check is True
, ale bez powodzenia… Zapętlanie trwa…
Proszę, pomóż mi wiedzieć, jaki błąd tutaj robię.
Oczekiwany wynik:
after i change the conf.ini dict key `state` to `False`, while loop should break, program should exit.
Proszę o pomoc ... Z góry dziękuję.
2 odpowiedzi
Na początku analizujesz plik konfiguracyjny tylko raz, więc później nie będzie to odzwierciedlać żadnych zmian. Musisz go przeanalizować za każdym razem, zanim zapytasz o wartość. Jeśli chodzi o bezpieczeństwo, lepiej jest użyć ast.literal_eval
.
import ast
def load_conf():
with open('conf.ini') as fh:
return ast.literal_eval(fh.read())
check = load_conf().get('state')
Spróbuj tego :
import time
import sys
import json
check = False
while check != 'True':
print("starting app")
time.sleep(10)
conffile = (eval(open('conf.ini', 'r').read()))
check = conffile.get('state')
sys.exit()
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.