Есть ли способ для консольных программ изменить способ их выполнения из-за какого-либо события, например, например, нажатие клавиши или какое-то событие в коде? - PullRequest
0 голосов
/ 04 сентября 2018

Все программы, которые я вижу в руководствах, являются консольными, и код выполняется от первой строки до последней строки, и, если есть, все начинается с первой строки. Есть ли способ для консольных программ изменить способ их выполнения из-за какого-либо события, например, например, нажатие клавиши или какое-то событие в коде? Лучший пример того, что я хочу сделать, это CLI маршрутизатора. Где я могу найти такие примеры?

def main(): 
    while(True):
        initial_setup() #choose IPs to monitor
        while(True):
            do_some_work() # do monitor the IPs

Мне нужен некоторый слушатель в секундах, пока он обнаруживает нажатия клавиш, а затем я перехожу к начальной настройке, в то время как do_some_work работает и только после того, как я закончу дополнительные изменения в initial_setup, do_some_work перезапускается.

Извините, я нуб и не очень хорошо объясняю пробалы, потому что английский для меня не родной. Лучший пример из реальной жизни, который я могу назвать, это CLI роутера, вы можете настроить intreface, и пока роутер выполняет маршрутизацию в фоновом режиме.

Код для Sergio S:

import threading
import time

def hello():
    while(True):
        print("Hello")
        time.sleep(2)

def hi():
    while(True):
       print("hi")
       time.sleep(2)
def press_key():
    a=input()
    a=False
    return a
def circle():
    MrBoolean=True
    while(MrBoolean):
        thr=[]
        thr.append(threading.Thread(target=hello))
        thr.append(threading.Thread(target=hi))
        thr.append(threading.Thread(target=press_key))
        for i in thr:
            i.start()
        for i in thr:
            i.join()
        mrBoolean=thr[3] 
 def main():
    while(True):
        circle()

main()

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Из вашего описания кажется, что вы ищете что-то, называемое многопоточностью: в то время как одна часть приложения выполняет одно, а другая - другое. Смотрите эти другие вопросы для более подробной информации: Как использовать многопоточность в Python? , Как остановить зацикливание потока в Python?

0 голосов
/ 04 сентября 2018
whats_typed = input('Say Aah:')
if whats_typed.strip() == 'Aah':
    print('Thanks!')
else:
    print('Whoops. Your input was:', whats_typed)

Вышеизложенное меняет то, что выполняется, в зависимости от ввода пользователя при запуске программы.

...