Запустите цикл в ожидании ввода пользователя - PullRequest
1 голос
/ 01 октября 2019

Я хочу запустить цикл в моем скрипте, пока пользователь ничего не вводит. Но когда они что-то вводят, я хочу, чтобы цикл прервался.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что при использовании функции input() скрипт остановится и будет ждать ввода, но я хочу запуститьдругая часть скрипта во время ожидания ввода пользователя.

Я пытался использовать try: с raw_input():

while True:
    try:
        print('SCAN BARCODE')
        userInput= raw_input()
        #doing something with input
    except:
        #run this while there is no input

С этим я обнаружил, что все, что находится вexcept: всегда будет запускаться, но не будет запускаться try:, даже если есть пользовательский ввод. Если я поменяю raw_input() на input(), сценарий просто ждет на input() и ничего не запускает в except:.

Как мне добиться того, что мне нужно?

Ответы [ 3 ]

1 голос
/ 01 октября 2019

вы можете использовать потоки Python:

from threading import Thread
import time

thread_running = True


def my_forever_while():
    global thread_running

    start_time = time.time()

    # run this while there is no input
    while thread_running:
        time.sleep(0.1)

        if time.time() - start_time >= 5:
            start_time = time.time()
            print('Another 5 seconds has passed')


def take_input():
    user_input = input('Type user input: ')
    # doing something with the input
    print('The user input is: ', user_input)


if __name__ == '__main__':
    t1 = Thread(target=my_forever_while)
    t2 = Thread(target=take_input)

    t1.start()
    t2.start()

    t2.join()  # interpreter will wait until your process get completed or terminated
    thread_running = False
    print('The end')

В моем примере у вас есть 2 потока, первый поток запущен и выполняет код, пока у вас не будет ввода от пользователя, поток 2 ожидает вводаот пользователя. После того как пользовательский поток ввода 1 и 2 прекратится.

0 голосов
/ 01 октября 2019

Это просто, если вы используете флаг логические значения

Flag = True
while Flag:
    try:
        Print('scan bar code')
        User_inp = input()
        if User_inp != '':
            Flag = False
    Except:
        Print('except part') 
0 голосов
/ 01 октября 2019

Я предлагаю вам поискать , выбрать

, что позволит вам проверить, равен ли дескриптор файла ready для операции чтения / записи / ожидания

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