Quiero ejecutar un bucle en mi script mientras el usuario no ha ingresado nada. Pero cuando han ingresado algo, quiero que el bucle se rompa.

El problema que estoy teniendo actualmente es que cuando uso la función input(), el script se detendrá y esperará una entrada, pero quiero ejecutar otra parte del script mientras espero la entrada del usuario.

He intentado usar try: con un raw_input():

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

Con esto, encuentro que lo que esté en except: siempre se ejecutará, pero no se ejecutará try: incluso cuando haya una entrada del usuario. Si cambio raw_input() a input(), el script solo espera en input() y no ejecuta nada en except:.

¿Cómo logro lo que busco?

1
Dritz 1 oct. 2019 a las 09:52

3 respuestas

La mejor respuesta

Puedes usar hilos de 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')

En mi ejemplo, tiene 2 subprocesos, el primer subproceso está activo y ejecuta el código hasta que tenga alguna entrada del usuario, el subproceso 2 está esperando alguna entrada del usuario. Después de obtener la entrada de usuario, los hilos 1 y 2 se detendrán.

1
kederrac 1 oct. 2019 a las 08:27

Es simple usar valores booleanos de bandera

Flag = True
while Flag:
    try:
        Print('scan bar code')
        User_inp = input()
        if User_inp != '':
            Flag = False
    Except:
        Print('except part') 
0
Abhishek Kumar 1 oct. 2019 a las 08:48

Le sugiero que busque select

Le permite verificar si un descriptor de archivo es ready para la operación de lectura / escritura / espera

0
flagboy firelight 1 oct. 2019 a las 06:55
58179445