cmd 运行 Python 文件时遇到错误如何停留界面?

2021-03-05 21:15:30 +08:00
 oldbird

正常运行是依次打印出处理的文件,遇到错误窗口就自动消失了,怎么让窗口及提示的错误信息保留下来?谢谢

2142 次点击
所在节点    Python
9 条回复
LZSZ
2021-03-05 21:19:08 +08:00
最后加上 os.system("pause")
jim9606
2021-03-05 22:10:01 +08:00
用 try-catch 包住整个主函数,捕捉所有异常后 input("Press any key...")
IgniteWhite
2021-03-05 22:18:52 +08:00
@jim9606 哈哈和我一样
CallMeReznov
2021-03-05 23:02:38 +08:00
python test.py >test.log
直接重定向到文件,想怎么看都可以.
zictos
2021-03-05 23:56:14 +08:00
方法一:
先打开 cmd,再用 python test.py 这样的命令运行 py 文件就可以停留界面,双击不行。

方法二(只需要在每个 py 文件前面加上 10 行代码即可,代码中的****替换成四空格缩进):
import time, os
import win32gui as w
title = w.GetWindowText(w.GetForegroundWindow())
if 'cmd' in title:
****pass
else:
****os.system('title "cmd"')
****filepath = os.path.realpath(__file__)
****cmd = 'cmd /k "python %s"' % filepath
****os.system(cmd)


#正式代码开始
for i in range(10):
****print(i)
ysc3839
2021-03-06 02:43:40 +08:00
@zictos 你这段代码问题挺多的,要读取和修改控制台的标题的话,用 GetConsoleTitle 和 SetConsoleTitle 即可。用 GetForegroundWindow 的话,遇到 Windows Terminal 等终端的话获取的就不是当前控制台的标题了。
另外要判断是否是通过 cmd 运行的话,我会选择通过父进程名来判断。
zictos
2021-03-06 10:48:26 +08:00
@ysc3839 #6
只是省时间随便写一下,给楼主一个思路,达到能双击运行并且不退出的效果,暂时没考虑那么多。如果有问题可以多加几个判断。

不过获取父进程的名称确实是个好办法,这样就只需要在 py 文件的前面加上下面两行代码就可以了:

import os, psutil; pp = psutil.Process(os.getppid()).name();
if pp != 'cmd.exe': os.system('cmd /k "python %s"' % os.path.realpath(__file__))
pkookp8
2021-03-06 11:18:38 +08:00
最外层 try catch
然后 sleep10000000 或者 1-2 楼的方法
qile1
2021-03-06 13:49:25 +08:00
cd py 目录
python testt.py
pause

保存为运行心疼我.bat 双击打开

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/758927

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX