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ę.

1
Sheldon 20 marzec 2020, 16:46

2 odpowiedzi

Najlepsza odpowiedź

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')
1
a_guest 20 marzec 2020, 13:50

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()
1
phoenixo 20 marzec 2020, 13:50