如何保持Python脚本输出窗口打开?


191

我刚开始使用Python。当我在Windows上执行python脚本文件时,出现输出窗口,但立即消失。我需要它呆在那里,以便我可以分析我的输出。如何保持打开状态?


6
迟来的+1000。我正在将python用作使用Windows的朋友的教学语言,我不敢相信它(至少基于现有文档)在我们可以运行脚本的位置并查看输出有多少麻烦。
卡斯卡贝尔2011年

2
只需将脚本拖放到cmd窗口中即可
JinSnow

您会认为默认情况下输出窗口应保持打开状态。在Mac OS中运行Python时会这样做。非常令人沮丧
Fandango68

我要链接另一个问题,一个Python错误后使Windows Console保持打开状态(我已经发布了使用拖放python脚本进行调试的答案。)
akinuri

请参阅下面@maurizio发布的答案-这是唯一不需要您更改python脚本的答案。
roryhewitt

Answers:


156

您有几种选择:

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

    python myscript.py

    为此,您需要在路径中使用python可执行文件。只需检查如何在Windows 上编辑环境变量,然后添加C:\PYTHON26(或安装python的任何目录)即可。

    程序结束后,它将带您回到cmd提示符,而不是关闭窗口。

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

    raw_input()

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

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


8
对项目3 +1。我使用Scite作为Python编辑器,它只是将输出保留在其自己的输出窗口中。这非常有用,因为您可能会在一个窗口中看到多个运行的输出。
Joris Timmermans,2009年

我可以通过已经打开的终端运行输出来查看输出。但是我需要在python命令中提供完整的脚本地址吗?可以避免吗?当我使用raw_input()方法时,它给了我NameError:未定义名称“ raw_input”。您能建议一个在执行后自动暂停的编辑器吗?
rohitmishra

1
@movingahead:也许您正在使用python 3?在python 3中,它被重命名为input()。但是我现在将使用python 2.6,因为python 3缺少尚未移植的重要第三方库。(请参阅有关python 2vs3的其他问题)。关于编辑器,我不使用Windows,Notepad ++可让您配置命令。我使用具有Windows版本的emacs,但从未使用过。
诺斯克洛

@nosklo谢谢!是的,我正在使用Python3。现在做一些基本的事情,所以应该不成问题。我会尝试记事本++。我目前正在尝试Pydev for Eclipse
rohitmishra

@movingahead我使用Aptana工作室。(pydev已预先打包)。真的很棒。没什么好说的。
v.oddou

51

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


3
很棒的答案。你应该有这个。
Jagu 2011年

1
只需执行python os.system命令,您就可以执行os.system(“ cmd / k” + myAppPath +“” + myFlagsString)
杰伊

1
cmd /k仅Windows。抱歉,我无法使用Mac替代品。
tzot

您是否必须拖动脚本,包括Python命令本身?对不起,我可以举个例子吗?我是新手,对Windows下的Python很陌生。
Fandango68年

1
这个答案是最直接的,并且完全符合我在Windows环境中的需要。程序执行后,终端窗口将保持打开状态。
卡梅隆·阿特金森(CameronAtkinson),

39

从已经打开的cmd窗口中启动脚本,或者在脚本末尾添加如下所示的内容,在Python 2中:

 raw_input("Press enter to exit ;)")

或者,在Python 3中:

input("Press enter to exit ;)")

1
“任何键”将不起作用,只有Enter键有效(或Ctrl + D,取决于我们的位置)。
丹尼尔·安德森

1
@DanielAndersson是的,更改了文字
Anurag Uniyal

54
如果您考虑一下,只有“输入”才能让您“退出”,这很深奥……
Joel B

19

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

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,您必须使用input()代替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()

14

您可以在之前合并答案:(对于Notepad ++用户)

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

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

这样,您在执行Notepad ++ python脚本后就可以保持交互模式,并且可以使用变量等等:)


如果将$(FULL_CURRENT_PATH)更改为Windows路径名,这将是一个不错的Windows批处理文件。
Noumenon

我发现获取插件PyNPP并分配运行它的快捷方式要容易得多(别忘了禁用以前的F5快捷方式)
JinSnow

11

使用以下两行创建Windows批处理文件:

python your-program.py

pause

2
import os os.system("pause").py文件末尾
Spikatrix

4
这是唯一甚至遥不可及的答案。那些需要破坏的答案,你将永远运行的每一个Python脚本raw_input或其他垃圾是完全错误的。自19818月以来,可以按照Python期望的方式在命令行上键入命令,或者使用MS-DOS随附的批处理语言来实现此目的
凯文·大通

1
更好的是,使用python %*它并将其设置为“打开方式”程序之一,以便您可以右键单击.py文件以打开暂停窗口,也可以将其作为py_pause.bat放在我的Anaconda3文件夹中(位于PATH中),所以现在我可以py_pause my-prog.py all my args从cmd行运行
brian

7

在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)

7

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

import atexit

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

在我的程序中,我将对的调用atexit.register放在了except子句中,以便仅在出现问题时才会暂停。

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.

5

我有一个类似的问题。使用Notepad ++时,我曾经使用过命令:C:\Python27\python.exe "$(FULL_CURRENT_PATH)"在代码终止后立即关闭cmd窗口。
现在我正在使用cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"它来保持cmd窗口打开。


1
您可能需要在Path环境变量的末尾添加“; C:\ Python27”。这样,可以将其缩短为“ cmd / k python -i“ $(FULL_CURRENT_PATH)”“-上面的答案恰好加上有用的-i。
Enigma 2012年

5

在Python 3上

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

会成功的。


2

为了保持窗口打开,我同意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(),只有 input()
(2)用单引号表示一个字符串;否则,如果您在任何内容(例如“ raw_input()”)附近键入double,它将认为它是函数,变量等,而不是文本。

在下一个示例中,我使用双引号,但由于它认为“ the”和“ function”之间的引号存在中断,所以即使它在您阅读时,您自己的想法也可以完全理解,但它不会起作用:

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

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


2

如果要从桌面快捷方式运行脚本,请右键单击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用户,无法弄清楚。
Michael Bruce

1

除了input和之外raw_input,您还可以使用无限while循环,例如: while True: pass(Python 2.5 + / 3)或while 1: pass(Python 2/3的所有版本)。但是,这可能会使用计算能力。

您也可以从命令行运行程序。python在命令行(Mac OS X Terminal)中键入,然后说Python 3.?.?(您的Python版本)它不会显示您的Python版本,或者说您python: command not found正在研究更改PATH值(上面列出的环境值)/ type C:\(Python folder\python.exe。如果成功,则键入pythonC:\(Python installation)\python.exe和程序的完整目录


1
这就像您去喝咖啡或睡觉时让汽车保持行驶状态!在许多级别上都非常危险
Fandango68

1

答案很迟,但是我创建了一个Windows Batch文件pythonbat.bat,该文件包含以下内容:

python.exe %1
@echo off
echo.
pause

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

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

无需更改任何Python脚本。

我仍然可以打开控制台窗口并指定python myscript.py是否要...

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


0

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

窗户不会关闭。


0

如果要保持cmd窗口打开并位于运行文件目录中,则可以在Windows 10上运行:

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

0

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


-1
  1. 这里下载并安装Notepad ++
  2. 这里下载并安装Python 2.7 not 3。
  3. 启动,运行Powershell。输入以下内容。 [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. 关闭Powershell并重新打开它。
  5. 为您的程序创建目录。mkdir脚本
  6. 打开该目录的cd脚本
  7. 在记事本++中,在新文件类型中: print "hello world"
  8. 将文件另存为hello.py
  9. 返回powershell并通过输入dir确保您在正确的目录中。您应该在那里看到文件hello.py。
  10. 在Powershell提示符下键入: python hello.py

-1

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

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

计数器是这样,因此代码不会重复自身。


-1

最简单的方法:

import time

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

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


1
你怎么敢 所以没必要。这根本不是这个问题的意义,您知道这一点。
Redgar Tech

-2

在Windows 10上插入以下代码:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.