代码之家  ›  专栏  ›  技术社区  ›  twneale

在不显示Windows控制台的情况下运行python脚本

  •  54
  • twneale  · 技术社区  · 15 年前

    是否有任何方法可以在WindowsXP中运行python脚本而不立即出现命令shell?我经常需要使用python自动执行wordperfect(用于工作),即使我的脚本没有输出,如果我在没有wp的情况下执行它,一个空的shell在消失之前仍然会弹出一秒钟。有什么方法可以防止这种情况发生吗?可能是某种输出重定向?

    3 回复  |  直到 6 年前
        1
  •  91
  •   Jed Smith    15 年前

    pythonw.exe将在没有命令提示的情况下运行脚本。问题是,python解释器python.exe链接到控制台子系统以生成控制台输出(因为这是90%的情况)--pythonw.exe链接到gui子系统,而Windows将不会为其创建控制台输出窗口,除非它要求一个。

    This article 讨论了用python进行的GUI编程,还提到pythonw.exe。它还帮助您指出,如果您的python文件以 .pyw 而不是 .py ,标准的Windows安装程序将正确设置关联,并在pythonw.exe中运行python。

    在您的情况下,这听起来不像是一个问题,但是依赖pythonw.exe使您的应用程序具有特定的Windows——也有其他解决方案可以在Mac OS X上实现这一点。

        2
  •  23
  •   Peter Shinners    15 年前

    如果用扩展名“.pyw”命名文件,那么Windows将使用pythonw.exe解释器执行这些文件。这将不会打开用于运行脚本的DOS控制台。

        3
  •  5
  •   W.Leto    6 年前

    不过,我尝试了上面的方法,由于脚本中有一个计时器,控制台死机会很快出现并消失。最后,我发现了以下代码:

    import ctypes
    import os
    import win32process
    
    hwnd = ctypes.windll.kernel32.GetConsoleWindow()      
    if hwnd != 0:      
        ctypes.windll.user32.ShowWindow(hwnd, 0)      
        ctypes.windll.kernel32.CloseHandle(hwnd)
        _, pid = win32process.GetWindowThreadProcessId(hwnd)
        os.system('taskkill /PID ' + str(pid) + ' /f')