如何防止程序完成执行时关闭命令窗口

Posted

技术标签:

【中文标题】如何防止程序完成执行时关闭命令窗口【英文标题】:How to prevent command window from closing when a program finishes executing 【发布时间】:2012-11-08 01:17:05 【问题描述】:

我用 Python (.py) 编写了一个小程序,并使用 Py2exe 将其转换为 Windows 可执行文件 (.exe)。它要求一个字符串,然后输出一个字符串——非常简单! -- 并且在 Python 中完美运行。

但是,当 exe 文件在命令窗口中完成执行时,命令窗口会在我看到它的输出之前自动关闭(我假设它确实会打印输出,因为正如我所说,它在 Python 中完美运行) .

如何防止这种情况发生?我假设我需要更改我的代码,但我究竟需要添加什么?

这是我的代码,以防它帮助你看到它(它是一个文字包装器):

import string

def insertNewlines(text, lineLength):
    if text == '':
        return ''
    elif len(text) <= lineLength:
        return text
    elif text[lineLength] == ' ':
        return text[:lineLength] + '\n' + insertNewlines(text[lineLength+1:], lineLength)
    elif text[lineLength-1] == ' ':
        return text[:lineLength] + '\n' + insertNewlines(text[lineLength:], lineLength)
    else:
        if string.find(text, ' ', lineLength) == -1:
            return text
        else:
            return text[:string.find(text,' ',lineLength)+1] + '\n' + insertNewlines(text[string.find(text,' ',lineLength)+1:], lineLength)
    print

if __name__ == '__main__':
    text = str(raw_input("Enter text to word-wrap: "))
    lineLength = int(raw_input("Enter number of characters per line: "))
    print 
    print insertNewlines(text, lineLength)

谢谢。

【问题讨论】:

你总是可以在程序末尾添加 raw_input() ,所以你必须按 enter 退出窗口。 【参考方案1】:

最简单的方法可能是在程序完成之前使用raw_input()。它会等到你按下回车键才关闭。

if __name__ == '__main__':
    text = str(raw_input("Enter text to word-wrap: "))
    lineLength = int(raw_input("Enter number of characters per line: "))
    print 
    print insertNewlines(text, lineLength)
    raw_input()

【讨论】:

谢谢!我也意识到当 exe 版本运行并要求用户输入时,用户无法使用鼠标右键单击粘贴文本(命令提示符对右键单击无响应)。因此,用户必须手动输入文本。你知道为什么会发生这种情况吗?再次感谢。 您可以通过右键单击菜单栏将文本粘贴到命令提示符,然后选择“编辑”,然后选择“粘贴”。 是的,烦人的 windows cmd.exe 东西。 其实,@wim,这与cmd.exe没有任何关系,那只是一个命令解释器。我认为你正在寻找的罪魁祸首是控制台子系统(或 CSRSS 或类似的东西)。【参考方案2】:

只需将其放在代码的末尾即可:

junk = raw_input ("Hit ENTER to exit: ")

换句话说,您的main 段应该是:

if __name__ == '__main__':
    text = str(raw_input("Enter text to word-wrap: "))
    lineLength = int(raw_input("Enter number of characters per line: "))
    print 
    print insertNewlines(text, lineLength)
    junk = raw_input ("Press ENTER to continue: ")

【讨论】:

我更喜欢写“Press Enter to continue...”或类似的写法,因为“enter”和“exit”的对立面让提示看起来措辞很尴尬 @wim:所以我不是唯一一个发现自己在寻找“退出”键的人? :) @wim,你的意思是像按开始按钮来关闭 Windows? :-) 我会听从你的判断。【参考方案3】:

这是我在脚本中使用的:

#### windows only ####
import msvcrt

def readch(echo=True):
    "Get a single character on Windows."
    while msvcrt.kbhit():
        msvcrt.getch()
    ch = msvcrt.getch()
    while ch in b'\x00\xe0':
        msvcrt.getch()
        ch = msvcrt.getch()
    if echo:
        msvcrt.putch(ch)
    return ch.decode()

def pause(prompt='Press any key to continue . . .'):
    if prompt:
        print prompt,
    readch()
######################

但有时,我只是使用以下方法使窗口在关闭前保持打开一小段时间。

import time
time.sleep(3)

【讨论】:

以上是关于如何防止程序完成执行时关闭命令窗口的主要内容,如果未能解决你的问题,请参考以下文章

当打开的控制台窗口关闭时,如何防止我的程序关闭?

Angular 2 - 关闭窗口时执行代码

防止来自 Spring Boot 的数据库关闭命令

UI 窗口关闭时执行命令 |玛雅/蟒蛇

运行批处理文件后如何关闭命令行窗口?

如何防止执行批处理文件后自动关闭控制台