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 · 2155 次点击
    这是一个创建于 1164 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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

    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   ·   实用小工具   ·   6164 人在线   最高记录 6547   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:00 · PVG 11:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com