Как создать функцию, которая проверяет ввод с клавиатуры в фоновом режиме, чтобы перезапустить скрипт - PullRequest
0 голосов
/ 22 июня 2019

Я довольно новичок в программировании на Python, и я сделал простой скрипт, и я хочу добавить функцию, которая проверяет в фоновом режиме ввод с клавиатуры (в моем случае, когда вы нажимаете «r»), и когда его нажимаютон перезапускает программу или просто переходит в функцию main () (запускает программу заново с самого начала).это все, но я просто не могу понять это, поэтому я попробовал три вещи:

1. (Threading): поэтому он создает два потока, один - программа, а другой -проверка ввода с клавиатуры, но это работает странно, а также не работает в моем случае.
2. (многопроцессорная обработка): я также пытался использовать модуль многопроцессорной обработки, но я не понял этого.
3. (фоновый поток): и я также попробовал код фонового потока: (ссылка: http://sebastiandahlgren.se/2014/06/27/running-a-method-as-a-background-thread-in-python/), и в self.run сделал обнаружение клавиатуры для «r», но он также не работал

import threading
import keyboard
import time
from multiprocessing import Process
import os
from threading import Thread
print ("grab piece of paper to write down bmi")
print ("you can restart at any time by pressing (r)")
time.sleep(1)
def main():
    running = True
    while running:
        global height
        height= input("enter height (cm): ")
        # here the code sometimes shows in python shell,
        # just like it stopped, ended (it print out that: >> ),
        # but it still continiues normally
        try:
            val = int(height)
            while True:
                global weight
                weight = input("enter weight: ")
                try:
                    val = int(weight)
                    if True:
                        global name
                        name = input("enter name: ")
                        print (" double check your inputs for the bmi")
                        print (" when you are sure it is correct press c")
                        print (" and if it's not press b")
                        import keyboard
                        a = 1
                        while a == 1:
                            if keyboard.is_pressed("c"):
                                main2()
                            elif keyboard.is_pressed("b"):
                                main()
                            else:
                                continue
                except ValueError:
                    if True:
                        print(" this is not a number (int)")
                        print(" please enter a number")
                        continue
        except ValueError:
            if True:
                print(" this is not a number")
                print(" please enter a number")
                continue


def main2():
    result = (int(weight)) / ((int(height)) / 100)**2
    print ("name: {}".format(name))
    print ("bmi: {}".format(result))
    print ("this person is:")
    if (result) <= 18.5: print("  underweight")
    elif (result) > 18.5 and (result) <= 25: print("  healthy")
    elif (result) > 25 and (result) <= 30: print("  overweight")
    elif (result) > 30 and (result) <= 35: print("  obese")
    elif (result) > 35: print("  you are fat guy!")
    print("after you write bmi press k to stop and quit the program ")
    import keyboard
    a = 1
    while a == 1:
        if keyboard.is_pressed("k"):
            import sys
            sys.exit(0)
        else:
            continue
def keyboard_detect():
    while True:
        if keyboard.is_pressed("r"):
            main()
th1 = Thread(target=main)
th2 = Thread(target=keyboard_detect)
th1.start()
th2.start()

извините за вставку всего кода, но дело в том, что когда я попробовал более простые коды, которые работают, но с этим кодом он не хочет работать, программа иногда работает странно, но когда я нажимаю "r", ничего не происходит, он даже не отображает сообщение об ошибке, и, кстати, я использую Python 3.7.2 и в коде примера может быть проблема с использованием 4 пробелов и табуляции (если вы получаете ошибку: неожиданный eol во время синтаксического анализа)

такя все еще в туалетекороль для решения.если вы найдете решение, спасибо ** (в квадрате в Python :)), но в любом случае спасибо

...