【问题标题】:How to keep a Python script output window open?如何保持 Python 脚本输出窗口打开?
【发布时间】:2010-11-03 07:23:18
【问题描述】:

我刚刚开始使用 Python。当我在 Windows 上执行 python 脚本文件时,输出窗口出现但瞬间消失。我需要它留在那里,这样我就可以分析我的输出。我怎样才能让它保持打开状态?

【问题讨论】:

  • 迟到的+1000。我正在使用 python 作为一个使用 Windows 的朋友的教学语言,我无法相信(至少基于现有文档)到我们可以运行脚本并查看输出的地方有多大的麻烦。
  • 只需将脚本拖放到 cmd 窗口中
  • 您会认为默认情况下输出窗口应该保持打开状态。在 Mac OS 中运行 Python 时会发生这种情况。很郁闷
  • 我将把另一个问题 Keep Windows Console open after a Python Error 链接到这个问题(我已经发布了一个使用拖放 python 脚本进行调试的答案。)
  • 查看@maurizio 在下面发布的答案 - 这是唯一不需要您更改 python 脚本的答案。

标签: python windows


【解决方案1】:

你有几个选择:

  1. 从已经打开的终端运行程序。打开命令提示符并输入:

    python myscript.py
    

    为此,您需要路径中的 python 可执行文件。只需在 Windows 上检查 how to edit environment variables,然后添加 C:\PYTHON26(或您安装 python 的任何目录)。

    当程序结束时,它会让您回到 cmd 提示符,而不是关闭窗口。

  2. 添加代码以在脚本末尾等待。对于 Python2,添加 ...

    raw_input()
    

    ... 在脚本结尾处等待 Enter 键。该方法很烦人,因为您必须修改脚本,并且必须记住在完成后将其删除。测试其他人的脚本时特别烦人。对于 Python3,请使用 input()

  3. 使用为您暂停的编辑器。一些为python准备的编辑器在执行后会自动为你暂停。其他编辑器允许您配置用于运行程序的命令行。我发现在运行时将其配置为“python -i myscript.py”特别有用。程序结束后,您将进入 python shell,程序环境已加载,因此您可以进一步使用变量并调用函数和方法。

【讨论】:

  • +1 到第 3 项。我使用 Scite 作为我的 Python 编辑器,它只是将输出保存在自己的输出窗口中。这非常有用,因为您可能会在一个窗口中看到多个运行的输出。
  • 我可以通过从已经打开的终端运行它来查看输出。但是我需要在python命令中给出完整的脚本地址吗?可以避免吗?当我使用 raw_input() 方法时,它给了我 NameError: name 'raw_input' is not defined。你能推荐一个在执行后自动暂停的编辑器吗?
  • @movingahead:也许你正在使用 python 3?在 python 3 中,它被重命名为 input()。但我现在会使用 python 2.6,因为 python 3 缺少尚未移植的重要第三方库。 (请参阅有关 python 2vs3 的其他问题)。关于编辑器,我不用windows,notepad++让你配置命令。我使用具有 windows 版本的 emacs,但我从未使用过。
  • @nosklo 谢谢!!是的,我正在使用 Python 3。现在做一些基本的事情,所以应该不是什么大问题。我会尝试记事本++。我目前正在为 Eclipse 试用 Pydev
  • 我有一个更好的方法:使用os。我使用以下代码:import os os.system("PAUSE") 用于 Windows,import os os.system('read -p ""')。这似乎是一种更清洁的方式。
【解决方案2】:

cmd /k 是打开任何控制台应用程序(不仅是 Python)的典型方式,其控制台窗口将在应用程序关闭后保留。我能想到的最简单的方法是按 Win+R,输入 cmd /k,然后将所需的脚本拖放到“运行”对话框中。

【讨论】:

  • 很棒的答案。你应该得到这个。
  • 仅供参考 python os.system 命令,您将执行 os.system("cmd /k" + myAppPath + "" + myFlagsString)
  • cmd /k 仅适用于 Windows。抱歉,我无法提供 Mac 替代方案。
  • 是否必须拖动脚本,包括Python命令本身?对不起,我可以举个例子吗?我是新手,对windows下的Python非常陌生。
  • 这个答案是最直接的,并且完全符合我在 Windows 环境中的需要。程序执行后,终端窗口保持打开状态。
【解决方案3】:

从已经打开的 cmd 窗口启动脚本或 在脚本末尾添加类似这样的内容,在 Python 2 中:

 raw_input("Press enter to exit ;)")

或者,在 Python 3 中:

input("Press enter to exit ;)")

【讨论】:

  • "Any key" 不起作用,只有 Enter 才能起作用(或 Ctrl+D,取决于我们所处的位置)。
  • @DanielAndersson 是的,更改了文本
  • 如果你仔细想想,它有点深,只有“进入”才能让你“退出”......
  • 请注意,如果发生异常,终端将关闭
【解决方案4】:

在出现异常时保持窗口打开(但在打印异常时)

Python 2

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
        print "Press Enter to continue ..." 
        raw_input() 

在任何情况下都保持窗口打开:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
    finally:
        print "Press Enter to continue ..." 
        raw_input()

Python 3

对于 Python3,您必须使用 use input() in place of raw_input(),当然还要适应 print 语句。

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except BaseException:
        import sys
        print(sys.exc_info()[0])
        import traceback
        print(traceback.format_exc())
        print("Press Enter to continue ...")
        input() 

在任何情况下都保持窗口打开:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
except BaseException:
    import sys
    print(sys.exc_info()[0])
    import traceback
    print(traceback.format_exc())
finally:
    print("Press Enter to continue ...")
    input()

【讨论】:

    【解决方案5】:

    你可以结合之前的答案:(记事本++用户)

    按 F5 运行当前脚本并输入命令:

    cmd /k python -i "$(FULL_CURRENT_PATH)"
    

    通过这种方式,您在执行 Notepad++ python 脚本后仍处于交互模式,并且您可以使用变量等:)

    【讨论】:

    • 如果您将 $(FULL_CURRENT_PATH) 更改为 Windows 路径名,这将是一个很棒的 Windows 批处理文件。
    • 我发现获取插件 PyNPP 并分配一个快捷方式来运行它要容易得多(不要忘记禁用以前的 F5 快捷方式)
    【解决方案6】:

    使用以下 2 行创建一个 Windows 批处理文件:

    python your-program.py
    
    pause
    

    【讨论】:

    • import os os.system("pause").py 文件的末尾
    • 这是这里唯一正确的答案。需要使用raw_input 或其他垃圾来破坏您将运行的每一个Python 脚本 的答案是完全错误的。要么按照 Python 期望的方式在命令行上键入命令,要么使用 MS-DOS 提供的 batch language正是出于这个目的,因为 August 1981
    • 更好的是,使用 python %* 并将其设置为“打开方式”程序之一,这样您就可以右键单击 .py 文件以打开暂停窗口,或者我也将其放入我的 Anaconda3文件夹(在 PATH 中)作为 py_pause.bat 所以现在我可以从 cmd 行运行py_pause my-prog.py all my args
    【解决方案7】:

    使用atexit,您可以在程序退出时暂停程序。如果错误/异常是退出的原因,它将在打印堆栈跟踪后暂停。

    import atexit
    
    # Python 2 should use `raw_input` instead of `input`
    atexit.register(input, 'Press Enter to continue...')
    

    在我的程序中,我在except 子句中调用atexit.register,这样它只会在出现问题时暂停。

    if __name__ == "__main__":
        try:
            something_that_may_fail()
    
        except:
            # Register the pause.
            import atexit
            atexit.register(input, 'Press Enter to continue...')
    
            raise # Reraise the exception.
    

    【讨论】:

      【解决方案8】:

      在 python 2 中,您可以使用:raw_input()

      >>print("Hello World!")    
      >>raw_input('Waiting a key...')
      

      在 python 3 中,你可以使用:input()

      >>print("Hello world!")    
      >>input('Waiting a key...')
      

      另外,你可以用 time.sleep(time) 来做到这一点

      >>import time
      >>print("The program will close in 5 seconds")
      >>time.sleep(5)
      

      【讨论】:

        【解决方案9】:

        在 Python 3 上

        input('Press Enter to Exit...')
        

        会成功的。

        【讨论】:

          【解决方案10】:

          你可以写

          input()
          

          在代码的末尾

          因此,当您运行脚本时,它会等待您输入内容

          {ENTER for example}
          

          【讨论】:

            【解决方案11】:

            我遇到了类似的问题。使用记事本++,我曾经使用命令:C:\Python27\python.exe "$(FULL_CURRENT_PATH)",它在代码终止后立即关闭 cmd 窗口。
            现在我正在使用cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)",它使 cmd 窗口保持打开状态。

            【讨论】:

            • 您可能需要将“;C:\Python27”添加到 Path 环境变量的末尾。这样它可以缩短为 'cmd /k python -i "$(FULL_CURRENT_PATH)"' - 正是上面的答案所说的加上有用的 -i。
            【解决方案12】:

            我同意 Anurag 的观点,为了让窗口保持打开状态,这就是我为简短的小型计算类型程序保持窗口打开的做法。

            这只会显示一个没有文本的光标:

            raw_input() 
            

            下一个示例将向您提供一个明确的消息,即程序已完成并且不等待程序中的另一个输入提示:

            print('You have reached the end and the "raw_input()" function is keeping the window open') 
            raw_input()
            

            注意!
            (1)在python 3中,没有raw_input(),只有 输入()
            (2) 使用单引号来表示字符串;否则,如果您在任何内容周围键入双打,例如 “raw_input()”,它会认为它是一个函数、变量等,而不是文本。

            在下一个示例中,我使用了双引号,它不会工作,因为它认为“the”和“function”之间的引号有一个中断,即使当你阅读它,你自己的头脑就能完全理解它:

            print("You have reached the end and the "input()" function is keeping the window open")
            input()
            

            希望这可以帮助那些刚起步但还没有弄清楚计算机如何思考的人。可能需要一段时间。 :o)

            【讨论】:

              【解决方案13】:

              如果您想从桌面快捷方式运行脚本,请右键单击您的 python 文件并选择Send to|Desktop (create shortcut)。然后右键单击快捷方式并选择属性。在快捷方式选项卡上选择目标:文本框并在路径前添加cmd /k,然后单击确定。该快捷方式现在应该在不关闭的情况下运行您的脚本,并且您不需要 input('Hit enter to close')

              注意,如果您的机器上有多个版本的 python,请在 cmd /k 和 scipt 路径之间添加所需的 python 可执行文件的名称,如下所示:

              cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"
              

              【讨论】:

              • 谢谢!这实际上帮助了我很多。我是 Linux 用户,无法弄清楚。
              【解决方案14】:

              除了inputraw_input,您还可以使用无限while 循环,如下所示: while True: pass (Python 2.5++/3) 或 while 1: pass (所有版本的 Python 2/3)。不过,这可能会使用计算能力。

              您也可以从命令行运行该程序。在命令行(Mac OS X 终端)中输入python,它应该显示Python 3.?.?(您的Python 版本)它不显示您的Python 版本,或者说python: command not found,请查看更改PATH 值(环境值,上面列出的)/类型C:\(Python folder\python.exe。如果成功,请输入 pythonC:\(Python installation)\python.exe 以及您的程序的完整目录

              【讨论】:

              • 这就像在你去喝咖啡或睡觉的时候让你的车开着!多层次的危险
              【解决方案15】:

              一个迟来的答案,但我创建了一个名为 pythonbat.bat 的 Windows 批处理文件,其中包含以下内容:

              python.exe %1
              @echo off
              echo.
              pause
              

              然后将pythonbat.bat 指定为.py 文件的默认处理程序。

              现在,当我在文件资源管理器中双击 .py 文件时,它会打开一个新的控制台窗口,运行 Python 脚本,然后暂停(保持打开状态),直到我按下任意键...

              无需更改任何 Python 脚本。

              如果我想的话,我仍然可以打开一个控制台窗口并指定python myscript.py...

              (我刚刚注意到@maurizio 已经发布了这个确切的答案)

              【讨论】:

                【解决方案16】:

                如果您想保持 cmd-window 打开并位于运行文件目录中,这适用于 Windows 10:

                cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)
                

                【讨论】:

                  【解决方案17】:

                  我在win10的py3环境中发现解决方案只是以管理员身份运行cmd或powershell,输出将保持在同一个控制台窗口,任何其他类型的用户运行python命令都会导致python打开一个新的控制台窗口.

                  【讨论】:

                    【解决方案18】:
                    `import sys,traceback
                    sys.exc_info()[0]
                    traceback.format_exc()
                    print("Press Enter to exit ...")
                    input()`
                    

                    只需在实际代码之后编写上述代码即可。例如。我正在从用户那里获取输入并在控制台上打印,因此我的代码将如下所示-->

                    `import sys,traceback
                    nam=input("enter your name:")
                    print("your name is:-{}".format(nam)) #here all my actual working is done
                    sys.exc_info()[0]
                    traceback.format_exc()
                    print("Press Enter to exit ...")
                    input()`
                    

                    【讨论】:

                    • 这与之前提供的答案有何不同?
                    【解决方案19】:

                    试试这个,

                    import sys
                    
                    stat='idlelib' in sys.modules
                    
                    if stat==False:
                        input()
                    

                    这只会停止控制台窗口,而不是 IDLE。

                    【讨论】:

                      【解决方案20】:

                      您可以使用-i 选项启动python 或设置环境变量PYTHONINSPECT=x。来自文档:

                      运行脚本后交互检查;甚至强制提示 如果 stdin 似乎不是终端;还有 PYTHONINSPECT=x

                      所以当你的脚本崩溃或完成时,你会得到一个 python 提示并且你的窗口不会关闭。

                      【讨论】:

                        【解决方案21】:
                        1. 转到 here 并下载并安装 Notepad++
                        2. 转到 here 并下载并安装 Python 2.7 而不是 3。
                        3. 开始,运行 Powershell。输入以下内容。 [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
                        4. 关闭 Powershell 并重新打开。
                        5. 为您的程序创建一个目录。 mkdir 脚本
                        6. 打开该目录 cd scripts
                        7. 在 Notepad++ 中,在新文件类型中:print "hello world"
                        8. 将文件另存为 hello.py
                        9. 返回 powershell 并通过键入 dir 确保您位于正确的目录中。您应该在那里看到您的文件 hello.py。
                        10. 在 Powershell 提示符下键入:python hello.py

                        【讨论】:

                          【解决方案22】:

                          您可以打开 PowerShell 并键入“python”。 导入 Python 后,您可以从您喜欢的文本编辑器中复制粘贴源代码以运行代码。

                          窗口不会关闭。

                          【讨论】:

                            【解决方案23】:

                            在 Windows 10 上,在开头插入:

                            #!/usr/bin/env python
                            # -*- coding: utf-8 -*-
                            

                            奇怪,但它对我有用!(当然还有最后的 input())

                            【讨论】:

                              【解决方案24】:

                              保持窗口打开的简单技巧:

                              counter = 0
                              
                              While (True):
                              
                                  If (counter == 0):
                              
                                      # Code goes here
                              
                                  counter += 1
                              

                              计数器使代码不会重复。

                              【讨论】:

                                【解决方案25】:

                                最简单的方法:

                                import time
                                
                                #Your code here
                                time.sleep(60)
                                #end of code (and console shut down)
                                

                                这将使代码保持 1 分钟,然后将其关闭。

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2013-05-20
                                  • 1970-01-01
                                  • 2020-11-08
                                  • 1970-01-01
                                  • 2016-06-29
                                  相关资源
                                  最近更新 更多