windows 命令提示符在 运行 使用 pyinstaller 将 python 脚本转换为 .exe 后消失

windows Command prompt vanishes after running a python script converted to .exe using pyinstaller

我正在使用 python3.7

我写了一个接受一些输入的脚本(例如 a=input("enter a value")

它 运行 如果我转到它的路径并在命令提示符下 运行 它会很顺利。 我也可以提供输入 运行 。 如果我输入错误,它会显示错误或异常(回溯)

所以我使用 pyinstaller

将它转换为 .exe

当我 运行 .exe 时,它​​按预期要求输入,它 运行 消失了,我看不到任何输出。 如果我输入错误,它会突然消失而不显示任何回溯

我在 Whosebug 和 google 上阅读了很多关于这个的问题,所以我在最后添加了一个输入语句让程序在退出前等待,

但在 错误输入 或我使用 sys.exit("test failed")[=39= 的情况下它不起作用] 在某些情况下它会消失,如何解决并保持 cmd window 打开?

添加脚本例如:

import sys
x = int(input("  enter a number :"))
y = int(input("  enter a number :"))
if x>100 or y > 100 :
    sys.exit("ERROR :value out of range")
z=x+y;
print(z)
input('press enter to exit')

如果输入小于 100 和整数,那么脚本(.exe 文件)运行 会顺利进行,我会收到消息“按回车退出”

但是如果输入数字大于 100 或者如果我在输入中输入“字符串或浮点数”,cmd window 会消失而不显示任何回溯

而如果我从 cmd 运行 py 文件然后我得到错误输入的正确回溯。

您不是在等待输入。

当您 运行 在 Windows 控制台中设置为 运行 的 .exe 时,除非您已经打开控制台并且如果您的程序使用控制台命令通过它,并且它一直设置为 运行 一直到最后,您只会看到 window 弹出然后自行关闭,除非您的程序正在执行需要用户输入的操作或大量的计算时间。

在使用 C# 等原生 运行 为 .exe 的语言进行编程时,这是相当常见的现象;据推测,这种行为在 Python 中也相当普遍。解决此问题的方法是在程序末尾添加一行以请求用户输入,这样控制台将在关闭前等待用户。

在你的例子中,你提到你已经添加到程序的末尾;问题是程序没有进入那个阶段,因为它遇到异常然后退出。您需要处理异常并添加用户输入提示以防止出现此行为。

你可以使用try-exceptinput()函数,这样当出现任何错误时,它会等待用户交互。

看这个例子-

a = input('Please enter a number: ')

try:
    int(a) # Converts into a integer type

except ValueError as v:
    # This will run when it cannot be converted or if there is any error
    print(v) # Shows the error
    input() # Waits for user input before closing

对于您的示例代码,试试这个 -

import sys

try:
    x = int(input("  enter a number :"))
    y = int(input("  enter a number :"))

except ValueError as v:
    print(v)
    input('Press any key to exit ')
    sys.exit()

if x>100 or y > 100 :
    try:
        sys.exit("ERROR :value out of range")

    except SystemExit as s:
        print(s)
        input('Press any key to exit ')
        sys.exit()
    
z=x+y

print(z)

您会看到命令提示符不会立即关闭

使用 while 循环,这样如果您输入错误,它会 return 重新输入,这样您就可以输入任何内容。例如,如果您只想使用整数值,则输入必须转换为整数或字符串,具体取决于您。下面的示例现在我认为你可以

ask = ""   #ask variable empty here because I want to use in while condition
print("YOU LOVE ME")
while ask != 'Ok Son':

    ask = input("Why? : ")

print("OK THANKS DAD")