Search code examples
pythontriggersinfinite-loop

How can I stop the infinite loop with a trigger?


I want the program to play sound until the user stops the program himself.

My code:

import pathlib,time
from pydub import AudioSegment
from pydub.playback import play
from gtts import gTTS 
english=["school", "book", "theater"]
select = str(input("press ENTER to Start Stop=>'s':"))
elements=('', 'p')
while True:  
    if select not in elements:
        print("Please Correct Selection--")
        continue
    elif select in elements:
        for pick in english:
            index = english.index(pick)
            eng = pick
            print(index, "-> ", eng)
            text_eng = eng
            my_eng_obj = gTTS(text=eng, lang="en", slow=False)
            text_eng = text_eng.replace(" ", "_")
            try:
                file_en = pathlib.Path(text_eng + ".mp3")
                if file_en.exists():
                    song_s = AudioSegment.from_mp3(file_en)
                    play(song_s)
                    pass
                else:
                    my_eng_obj.save(text_eng + ".mp3")
                    song_s = AudioSegment.from_mp3(file_en)
                    play(song_s)
            except:
                pass
            time.sleep(0.2)

The sound section is working properly. I need the infinite loop section. How can I interrupt with an input?


Solution

  • That's one of the solutions

    import time
    from pynput import keyboard
    
    print("Press Enter ==> Start\n"
          "Press p   ==> Exit")
    
    check = ''
    def Start(key):
        if key == keyboard.Key.enter:
            print("Started")
            return False
    def Stop(key):
        global check
        if key==keyboard.KeyCode(char='p'):
            check = 'stop'
            return False
    with keyboard.Listener(on_release=Start) as listener:
        listener.join()
        listener = keyboard.Listener(on_release=Stop)
        listener.start()
    while True:
        print("Do Something:Test")
        time.sleep(1)
        if check == 'stop':
            print("\nLoop Stopped...!")
            break