V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
oldbird
V2EX  ›  Python

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

  •  
  •   oldbird · 2021-03-05 21:15:30 +08:00 · 2325 次点击
    这是一个创建于 1393 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2021-03-06 13:49:25 +08:00
    LZSZ
        1
    LZSZ  
       2021-03-05 21:19:08 +08:00
    最后加上 os.system("pause")
    jim9606
        2
    jim9606  
       2021-03-05 22:10:01 +08:00
    用 try-catch 包住整个主函数,捕捉所有异常后 input("Press any key...")
    IgniteWhite
        3
    IgniteWhite  
       2021-03-05 22:18:52 +08:00 via iPhone
    @jim9606 哈哈和我一样
    CallMeReznov
        4
    CallMeReznov  
       2021-03-05 23:02:38 +08:00
    python test.py >test.log
    直接重定向到文件,想怎么看都可以.
    zictos
        5
    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
        6
    ysc3839  
       2021-03-06 02:43:40 +08:00 via Android
    @zictos 你这段代码问题挺多的,要读取和修改控制台的标题的话,用 GetConsoleTitle 和 SetConsoleTitle 即可。用 GetForegroundWindow 的话,遇到 Windows Terminal 等终端的话获取的就不是当前控制台的标题了。
    另外要判断是否是通过 cmd 运行的话,我会选择通过父进程名来判断。
    zictos
        7
    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
        8
    pkookp8  
       2021-03-06 11:18:38 +08:00 via Android
    最外层 try catch
    然后 sleep10000000 或者 1-2 楼的方法
    qile1
        9
    qile1  
       2021-03-06 13:49:25 +08:00 via Android
    cd py 目录
    python testt.py
    pause

    保存为运行心疼我.bat 双击打开
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2749 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:27 · PVG 20:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.