【问题标题】:How can I stop the infinite loop with a trigger?如何使用触发器停止无限循环?
【发布时间】:2021-07-02 19:57:29
【问题描述】:

我希望程序一直播放声音,直到用户自己停止程序。

我的代码:

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)

声音部分工作正常。我需要无限循环部分。 如何通过输入打断?

【问题讨论】:

    标签: python triggers infinite-loop


    【解决方案1】:

    试试这个:

    trigger = False
    
    
    while True:  # infinite loop
        # Do something
        # Do something to make trigger True. Keep it false if you want to keep the loop running
        if 1 + 1 == 2:  # Example comparison
            trigger = True
        print("Hello World")
        if trigger:
            break
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      # Modify user message
      select = str(input("press ENTER to Start Stop=>CTRL+C:"))
      
      # Use a try/except within the while loop
      while True:
          try:
              if select not in elements:
                  # ...
              elif select in elements:
                  # ...
          except KeyboardInterrupt:
              break
      

      【讨论】:

      • 谢谢你,@Laurent 我试过了,但我无法得到结果。我有一个 mac 操作系统,也许这就是原因。:/
      【解决方案3】:

      这是解决方案之一

      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
      

      【讨论】:

        猜你喜欢
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多