在Windows上双击运行Python程序不会自动退出的方法
前言
本文描述了如何在Windows上双击运行Python程序,即使发生错误也不会自动退出的方法。
环境和工具:
将python.exe添加到环境变量中
使用.exe的的Python安装包来安装;
安装时勾选“Add Python to System env path”
如果已经安装,但是漏了勾选“Add Python to System env path”,可以再次运行.exe安装包选择修复(Modify)安装,并勾选“Add Python to System env path”。
一个Python程序例子
一个生成文件并计算文件大小的Python程序例子:
import os
def file_size(file_name):
size = os.stat(file_name).st_size
print(f'File size of {file_name}: {size}')
def main():
with open('data.txt', 'w') as file:
file.write("data file")
file_size('data.txt')
if __name__ == '__main__':
main()
将上面代码保存为test.py。
双击运行Python程序报错
直接在Windows上双击test.py,窗口一闪而过,并没有创建data.txt,注意看窗口报错“Invalid Syntax”。
这是因为当前存放test.py的目录并不在Windows的PATH环境变量中。
但是我们不可能将每一个存放Python程序的目录都添加到Windows的PATH环境变量中,这个问题可以通过运行Windows Command来解决。
双击运行Windows Command
在test.py的目录下创建一个test.cmd;
在test.cmd中输入:
python test.py
双击运行test.cmd就可以执行成功了,可以看到data.txt文件已被成功创建。
这个时候还有一个问题,程序运行结束后,窗口就自动关闭了。因为程序运行很快,窗口一闪而过,看不清窗口上显示了什么信息。
让程序停一会
为了让程序执行后停一会,不要自动关闭窗口,可以在test.py的main()方法中用input语句让程序等待用户输入,这时无论用户按下哪个键程序都继续结束程序。
import os
def file_size(file_name):
size = os.stat(file_name).st_size
print(f'File size of {file_name}: {size}')
def main():
with open('data.txt', 'w') as file:
file.write("data file")
file_size('data.txt')
input('Press any key to quit program.')
if __name__ == '__main__':
main()
但是这时如果程序执行出错时,窗口仍然会自动关闭。
程序出错时打印错误信息,不自动关闭窗口
为了让程序执行出错时,不自动关闭窗口,而是打印错误信息,则需要捕捉和处理程序可能发生的错误。
一个故意写错文件名的例子:
import os
def file_size(file_name):
size = os.stat(file_name).st_size
print(f'File size of {file_name}: {size}')
def main():
try:
with open('data.txt', 'w') as file:
file.write("data file")
file_size('wrong.txt')
except FileNotFoundError as error:
print(error)
finally:
input('Press any key to quit program.')
if __name__ == '__main__':
main()
小结
在Windows上双击运行Python不自动退出的方法:
确保将python.exe添加到Windows系统环境变量PATH中;
新建一个Windows Command(.cmd)文件;
在.cmd文件中输入python xxx.py;
在Python文件(.py)的main()函数最后使用input语句来让程序执行结束前,先等待用户按下任意键,才关闭窗口;
在Python文件(.py)中使用try...except...finally来捕捉可能发生的错误,使得在程序发生错误时,可以打印错误信息,而不会自动关闭窗口。
原文链接:https://blog.csdn.net/nklinsirui/article/details/107420944