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-except
和input()
函数,这样当出现任何错误时,它会等待用户交互。
看这个例子-
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")
我正在使用 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-except
和input()
函数,这样当出现任何错误时,它会等待用户交互。
看这个例子-
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")