Цикл приостановки Python при вводе пользователем - PullRequest
2 голосов
/ 30 июня 2019

Эй, я пытаюсь сделать цикл приостановленным из пользовательского ввода, например, иметь поле ввода в терминале, которое, если вы наберете pause, приостановит цикл, а затем, если вы введете start, он запустится снова.

Нечто подобное, но постоянно происходит "# Что-то", не дожидаясь отправки ввода.

while True:
    #Do something
    pause = input('Pause or play:')
    if pause == 'Pause':
        #Paused

Ответы [ 2 ]

4 голосов
/ 30 июня 2019

Хорошо, я понял, вот решение с потоками:

from threading import Thread
import time
paused = "play"
def loop():
  global paused
  while not (paused == "pause"):
    print("do some")
    time.sleep(3)

def interrupt():
  global paused
  paused = input('pause or play:')


if __name__ == "__main__":
  thread2 = Thread(target = interrupt, args = [])
  thread = Thread(target = loop, args = [])
  thread.start()
  thread2.start()
1 голос
/ 30 июня 2019

Вы не можете напрямую, так как input блокирует все, пока не вернется.
Модуль _thread, тем не менее, может помочь вам в этом:

import _thread

def input_thread(checker):
    while True:
        text = input()
        if text == 'Pause':
            checker.append(True)
            break
        else:
            print('Unknown input: "{}"'.format(text))

def do_stuff():
    checker = []
    _thread.start_new_thread(input_thread, (checker,))
    counter = 0
    while not checker:
        counter += 1
    return counter

print(do_stuff())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...