如何在Python中防止命令提示符关闭?

11

我对Python非常不熟悉。我使用了以下代码:

x = input(" Hey what is your name " )       
print(" Hey, " + x)  
input(" press close to exit ")

因为我在互联网上寻找了这个问题,得知你需要在结尾处加一行虚拟输入以防止命令提示符被关闭,但我仍然面临着这个问题... 请帮忙。

我正在使用Python 3.3


您可以通过Python的IDLE平台运行脚本,这样它就不会“关闭”,或者您可以打开命令行(cmd),然后从那里运行脚本,它也不会“关闭”。 - Inbar Rose
1
我不确定你在寻找什么。python -i script.py 是否符合你的要求?哪个命令提示符正在关闭?是 Python 命令提示符还是你正在运行 Python 的 shell? - mgilson
嗯,我想我知道问题所在了:你是在第二个“input”语句之后输入的吗?input命令的目的是挂起(“停留在那里不关闭”),直到用户按下一个键。如果你输入了一个值,它就会关闭。 - Samuele Mattiuzzo
不,我正在提供第一个输入,然后在第二行我要求Python将其打印出来。然后我再次请求Python输入以使其保留。它在IDLE上完美运行,但在CMD上没有。 - Aakash
5个回答

24
在 Windows 上,CMD 控制台会关闭,因为 Python 进程在最后退出。
为了防止这种情况发生,先打开控制台,然后使用命令行运行脚本。方法是右键单击包含脚本的文件夹,选择“在此处打开控制台”,在控制台中输入“python 脚本名称.py”。
另一种方法是,添加一个 input() 调用来推迟脚本结束。这使得脚本的用户可以选择何时结束脚本并关闭控制台。

4
请注意,您(至少在Windows 7上)需要在存放源文件的目录上按Shift +右键,而不是在脚本本身上。 - Tim
1
我也尝试过那个方法,但即使添加了输入,命令提示符仍然立即关闭。 - Aakash
1
好的,它在我的系统上也不等待,就像楼主的情况一样。据我所见,没有任何异常。 - martineau
1
@martineau:使用Python 3而不是2,或者使用raw_input() - Martijn Pieters
尝试了一下,但它无法运行:
python C:\Users\Steve\Downloads\fast-wavenet-master\fast-wavenet-master\wavenet\models.py File "<stdin>", line 1 python C:\Users\Steve\Downloads\fast-wavenet-master\fast-wavenet-master\wavenet\models.py ^ SyntaxError: 语法错误
- Hatchling
显示剩余11条评论

16

可以使用os模块来完成。下面是简单的代码:

import os
os.system("pause")

这将生成一个暂停并要求用户按任意键继续。

[编辑:上述方法适用于Windows操作系统。似乎在Mac上存在问题(如ihue在评论中指出)。问题在于“os”库是特定于操作系统的,并且某些命令可能在一个操作系统上无法像在另一个操作系统上一样运行。]


1
"os" 库是特定于操作系统的。我在 Windows 上使用它,它很好用,因为 cmd 中实际上有一个 "pause" 命令。也许 Linux 有其他方法来实现这个。 - Blaze
好的,谢谢您的澄清。我会查看如何在Mac上具体实现这一点,但您应该在回答中提到这一点。 - code-8
真的,我加上了。谢谢你提出这个问题。请也分享一下你在Mac上的发现。 - Blaze

3

针对Windows环境:

如果您不想使用命令提示符(或者在命令提示符被限制的环境中工作),我认为以下解决方案是很好的选择。我使用的方法是创建一个批处理文件。

使用记事本创建一个文本文件,文件内容如下:

my_python_program.py pause

然后将文件保存为“my_python_program.bat” - 不要忘记选择“所有文件”!

运行批处理文件时,它将运行python程序并在结尾暂停以允许您读取输出。然后,如果您按任意键,它将关闭窗口。


2
只需在程序末尾加入简单的输入,这对我很有效。
input()

试一试,它会正确地工作


-1

试试这个,

import sys

status='idlelib' in sys.modules

# Put this segment at the end of code
if status==False:
    input()

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接