2017-07-07 1 views
0

Ich habe ein Python-Skript läuft Selen-Framework in einer Befehlszeile und läuft kontinuierlich zu steuern Chrome Hintergrund Datenverarbeitung und Überwachung. Meine vereinfachte Codestruktur ist, wie folgendWas ist der beste Weg, um ein Python-Skript jederzeit und überall anzuhalten/anzuhalten?

while True: 
    Do_task1() # a blocking function 
    Do_task2() # another blocking fucntion 
    ... # calling many blocking functions below, including wait(), time.sleep() 

ich einen Weg brauche das Skript jederzeit und überall zu unterbrechen sicher zu unterbrechen, beenden und Befehle geben. Was sind die besten Möglichkeiten, dies zu tun? Ich habe gedacht und versuchte, von mehreren Möglichkeiten, aber ich bin nicht ganz sicher, wie es zu nähern:

  1. ich das versucht:

    if msvcrt.kbhit(): 
        key = msvcrt.getch().decode("utf-8").lower() 
        if key == "j": 
         self.setting1 = True 
        elif key == "k": 
         self.setting2 = True 
    

    in der while-Schleife, aber es muss passieren Blockieren von Anrufen, bevor Sie auf meine Tasten drücken. Und der Befehl akzeptiert nicht wirklich meine Tastatureingabe in Echtzeit, das heißt, ich gebe eine Zeicheneingabe ein, und ich denke, dass es im Hintergrundpuffer sein wird, und sobald die Codeausführung den obigen Code erreicht, beginnt es zu tun Sachen. Um das Skript zu beenden, mache ich einfach Ctrl-C im CMD-Fenster, was ich glaube nicht, dass es der beste Weg ist, und ich sollte die Programmende-Hintergrundprozesse wie Chromedriver richtig beenden.

  2. Ich dachte an eine GUI, die irgendwie asynchron läuft und ich kann Tasten zum Anhalten und Beenden des Skripts haben. Aber ich weiß nicht genau, wie ich es angehen soll oder ob das eine gute Idee ist, es überhaupt zu versuchen. Jeder Vorschlag ist willkommen.

  3. Verwenden Sie ein Skriptüberwachung/Workflow-Monitoring-Framework wie AirBnB's Airflow oder Luigi. Ich hatte nur kurze Nachforschungen angestellt.

A related question aber ich muss nicht genau zurückkehren, wo es

aufhörte

Antwort

0

Ich versuche, in der Regel verwenden und außer diesen

while True: 
    try: 
     Do_Task1() 
     Do_Task2() 
    except KeyBoardInterrrupt: 
     break 
zu tun
Verwandte Themen