【问题标题】:Correct way to pause a Python program暂停 Python 程序的正确方法
【发布时间】:2012-07-18 03:14:00
【问题描述】:

我一直在使用 input 函数来暂停我的脚本:

print("something")
wait = input("Press Enter to continue.")
print("something")

有正式的方法吗?

【问题讨论】:

  • 在调试器中工作并使用断点?

标签: python sleep


【解决方案1】:

对我来说似乎很好(或 Python 2.X 中的 raw_input())。或者,如果您想暂停一定秒数,可以使用time.sleep()

import time
print("something")
time.sleep(5.5)    # Pause 5.5 seconds
print("something")

【讨论】:

  • 我知道时间模块中的睡眠功能,但是如果我希望用户阅读很长的文本块怎么办?
  • 只需使用print 显示长文本块,然后根据您的Python 版本使用input()raw_input('Press <ENTER> to continue')
  • 对于长文本块,最好使用input()(或Python 2.x上的raw_input())来提示用户,而不是延时。快速的读者不想等待延迟,慢的读者可能想要更多的延迟时间,有人可能在阅读时被打断并想要更多的时间,等等。另外,如果有人经常使用该程序,他/她可能会习惯它的工作方式,甚至不需要阅读长文本。让用户控制文本块显示多长时间以供阅读更友好。
【解决方案2】:

我假设你想在没有输入的情况下暂停。

用途:

time.sleep(seconds)

【讨论】:

    【解决方案3】:

    正如mhawkesteveha 的cmets 所指出的,这个确切问题的最佳答案是:

    对于长文本块,最好使用input('Press <ENTER> to continue')(或raw_input('Press <ENTER> to continue') on Python 2.x) 来提示用户,而不是延迟时间。快速阅读器 不想等待延迟,慢读者可能需要更多时间 延迟,有人可能会在阅读时被打断并想要 更多时间等。此外,如果有人经常使用该程序,他/她 可能会习惯它的工作方式,甚至不需要阅读长篇 文本。让用户控制阻塞多长时间更友好 显示文本以供阅读。

    【讨论】:

      【解决方案4】:

      仅适用于 Windows,请使用:

      import os
      os.system("pause")
      

      【讨论】:

      • 这是特定于 Windows 的,而所有现有答案都与平台无关。
      • 为什么 python 会实现一个特定于操作系统的函数?这没有任何意义。
      • os.system() 调用一个名为“pause”的系统函数——例如 ubuntu 不知道“pause”是什么,所以它会返回: sh: 1: pause : 未找到
      • 我知道这可能不是问题想要的,但它对我帮助很大。
      • 如果您从 Windows 批处理文件调用 python 脚本,您可以在批处理文件末尾添加pause,而不是在 python 文件末尾添加命令,您将得到同样的效果。这样,python 文件是独立于操作系统的,而批处理文件只能在 Windows 中使用。
      【解决方案5】:

      我有一个类似的问题,我正在使用信号:

      import signal
      
      def signal_handler(signal_number, frame):
          print "Proceed ..."
      
      signal.signal(signal.SIGINT, signal_handler)
      signal.pause()
      

      因此,您为信号 SIGINT 注册了一个处理程序并暂停等待任何信号。现在从您的程序外部(例如在 bash 中),您可以运行 kill -2 <python_pid>,它会将信号 2(即 SIGINT)发送到您的 python 程序。您的程序将调用您注册的处理程序并继续运行。

      【讨论】:

      • 请注意,这不能跨平台移植,例如。在 Windows 上没有 signal.pause
      • 您在哪个平台上试用过? Linux?
      【解决方案6】:

      所以,我发现这在我的编码工作中非常有效。我只是在我的程序的最开始创建了一个函数

      def pause():
          programPause = raw_input("Press the <ENTER> key to continue...")
      

      现在我可以在需要时使用pause() 函数,就像我在编写批处理文件一样。 例如,在这样的程序中:

      import os
      import system
      
      def pause():
          programPause = raw_input("Press the <ENTER> key to continue...")
      
      print("Think about what you ate for dinner last night...")
      pause()
      

      现在显然这个程序没有目标,只是为了举例,但你可以准确地理解我的意思。

      注意:对于 Python 3,您需要使用 input 而不是 raw_input

      【讨论】:

      • 这与问题中所述有何不同?
      【解决方案7】:

      我认为停止执行的最好方法是 time.sleep() 函数。

      如果您只需要在某些情况下暂停执行,您可以简单地实现一个 if 语句,如下所示:

      if somethinghappen:
          time.sleep(seconds)
      

      您可以将 else 分支留空。

      【讨论】:

        【解决方案8】:

        很简单:

        raw_input("Press Enter to continue ...")
        print("Doing something...")
        

        【讨论】:

        • 我用过这个方法,不过我也喜欢用它作为 pause() 函数,我认为不需要 exit()。 def pause(): return raw_input("按 Enter 继续...")
        • NameError: name 'raw_input' is not defined
        【解决方案9】:
        Print ("This is how you pause")
        
        input()
        

        【讨论】:

        • 这似乎导致错误:NameError: name 'Print' is not defined
        • @PeterMortensen 那是由于“打印”和“(“这是你暂停的方式”)”之间的空白。
        • Python 是区分大小写的,所以调用函数需要小写的print。您甚至可以在函数名和左括号之间保留空格而不会出错。
        【解决方案10】:

        我对 Python 2 和 Python 3 使用以下命令来暂停代码执行,直到用户按下 Enter

        import six
        
        if six.PY2:
            raw_input("Press the <Enter> key to continue...")
        else:
            input("Press the <Enter> key to continue...")
        

        【讨论】:

          【解决方案11】:

          在 Linux 中,您可以向后台发出 kill -TSTP &lt;pid&gt; 并停止进程。所以,它就在那里,但不消耗 CPU 时间。

          然后,kill -CONT &lt;pid&gt; 关闭并再次运行。

          【讨论】:

            【解决方案12】:

            我想我喜欢这个解决方案:

            import getpass
            getpass.getpass("Press Enter to Continue")
            

            它隐藏了用户输入的任何内容,这有助于澄清此处未使用输入。

            但请注意 OS X 平台。它显示了一个可能令人困惑的键。


            可能最好的解决方案是自己执行类似于 getpass 模块的操作,而无需拨打read -s。也许让前景色与背景相匹配?

            【讨论】:

              【解决方案13】:

              为了跨 Python 2/3 兼容性,您可以通过 six 库使用 input

              import six
              six.moves.input( 'Press the <ENTER> key to continue...' )
              

              【讨论】:

                【解决方案14】:

                通过这种方法,您只需按您指定的任何指定键即可恢复您的程序:

                import keyboard
                while True:
                    key = keyboard.read_key()
                    if key == 'space':  # You can put any key you like instead of 'space'
                        break
                

                方法相同,但方式不同:

                import keyboard
                while True:
                    if keyboard.is_pressed('space'):  # The same. you can put any key you like instead of 'space'
                        break
                

                注意:你可以安装keyboard模块,只需在你的shell或cmd中写这个:

                pip install keyboard
                

                【讨论】:

                  【解决方案15】:

                  跨平台方式;无处不在

                  import os, sys
                  
                  if sys.platform == 'win32':
                      os.system('pause')
                  else:
                      input('Press any key to continue...')
                  

                  【讨论】:

                  • 如果平台是windows,使用windows批处理脚本的pause命令。如果不是 windows,请使用 python input() 函数暂停输入。输入后,程序将关闭。
                  【解决方案16】:

                  我与喜欢简单解决方案的非程序员一起工作:

                  import code
                  code.interact(banner='Paused. Press ^D (Ctrl+D) to continue.', local=globals()) 
                  

                  这会产生一个解释器,其行为几乎与真正的解释器完全相同,包括当前上下文,只有输出:

                  暂停。按 ^D (Ctrl+D) 继续。
                  >>>

                  Python Debugger 也是暂停的好方法。

                  import pdb
                  pdb.set_trace() # Python 2
                  

                  breakpoint() # Python 3
                  

                  【讨论】:

                    猜你喜欢
                    • 2017-03-25
                    • 1970-01-01
                    • 2018-10-23
                    • 2019-08-09
                    • 2013-03-31
                    • 1970-01-01
                    • 2014-04-13
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多