在不出现 Windows 控制台的情况下运行 Python 脚本

Posted

技术标签:

【中文标题】在不出现 Windows 控制台的情况下运行 Python 脚本【英文标题】:Run Python script without Windows console appearing 【发布时间】:2010-12-13 22:13:04 【问题描述】:

有没有什么方法可以在 Windows XP 中运行 Python 脚本而不会暂时出现命令 shell?我经常需要使用 Python 自动化 WordPerfect(用于工作),即使我的脚本没有输出,如果我在没有 WP 的情况下执行它,空壳仍然会弹出一秒钟然后消失。有什么办法可以防止这种情况发生吗?也许是某种输出重定向?

【问题讨论】:

【参考方案1】:

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 上完成此操作。

【讨论】:

有没有办法在python脚本中指定天气使用python.exepythonw.exe?例如,def prog_a(): run_as_pythonw() blah blahdef prog_b(): run_as_python() blah blah。如果愿意,可以切换到静音模式。 它不像你解释的那样工作,将 pythonw.exe 用于 .pyw。您能否更新答案。 2016 年 如果您的program.pyw 仍然弹出控制台窗口,可能是因为您的#!程序开头的行。 (在将一个为 Linux 编写的 GUI 程序(从 #!/usr/bin/env python 开始)复制到 Windows 7 时发现了困难。)只需删除该行。【参考方案2】:

如果您使用“.pyw”扩展名命名文件,则 windows 将使用 pythonw.exe 解释器执行它们。这不会打开用于运行脚本的 dos 控制台。

【讨论】:

执行脚本python exe失败【参考方案3】:

我尝试了上述方法,但是,由于脚本中的计时器,控制台静止图像会出现并迅速消失。最后,我找到了以下代码:

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')

【讨论】:

【参考方案4】:

我遇到了同样的问题。我尝试了很多选择,但都失败了 但是我尝试了这个方法,它神奇地起作用了!!!!!!

所以,我在一个文件夹中有这个 python 文件 (mod.py),我曾经使用命令提示符运行 当我用来关闭 cmd 时,gui 会自动关闭.....(悲伤), 所以我按如下方式运行它 C:\....>pythonw mod.py 别忘了pythonw "w" 是 IMP

【讨论】:

我有 .bat 文件(在 Windows 10 上) C:\Users\XXXV\AppData\Local\Microsoft\WindowsApps\pythonw.exe C:\Scripts\p1.pyw 但仍然是命令控制台显示并保持在那里,直到 python 脚本完成执行【参考方案5】:

在 Win10 中相当简单: 打开 PowerShell 并输入以下命令:

type nul > openWindowed.vbs
type nul > main.py
notepad openWindowed.vbs

将下一个粘贴到您的 openWindowed.vbs 文件中:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Users\path\to\main.py" & Chr(34), 0
Set WshShell = Nothing

.vbs 文件将在不打开 cmd 的情况下执行您的 main.py 文件。我经常在 make.py 文件中使用它,因为我不知道 cmake 脚本。

【讨论】:

我试过“type nul > openWindowed.vbs”和“nul > openWindowed.vbs”..都抛出了错误。看来您可能只是在这里创建空文件,对吗?抱歉,我对 vbs 或 PowerShell 几乎一无所知。【参考方案6】:

将文件扩展名更改为 .pyw 并将以下行(根据您的 python 版本进行相应更改)添加到脚本的开头:

#! c:\\Users\\sohra\\AppData\\Local\\Programs\\Python\\Python38\\pythonw.exe

现在,如果你双击该文件,它将由 pythonw.exe 执行,没有控制台窗口。

【讨论】:

【参考方案7】:

转动你的窗户后卫。并使用pip install pyinstaller 安装pyinstaller 包。

安装后打开cmd输入pyinstaller --onefile --noconsole filename.py

【讨论】:

【参考方案8】:

这适用于所有 Windows 版本:

1.用记事本(或任何其他文本编辑器)创建“Runner.bat”文件并插入以下内容:

@echo off
python server.py

其中 server.py 是您要运行的 Python 脚本的路径。

2.用记事本创建“RunScript.vbs”文件并插入以下内容:

CreateObject("Wscript.Shell").Run "runner.bat",0,True

3.双击运行“RunScript.vbs”文件,您的Python脚本将在没有任何可见控制台窗口的情况下运行

附言我知道这不是您的问题的一部分,但通常情况下,如果您想在 Windows 启动时(用户登录后)运行脚本,只需粘贴“RunScript.vbs”文件的快捷方式进入您的启动文件夹。 (在 Windows 10 上主要位于:C:\Users[USERNAME]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

最好的问候

【讨论】:

【参考方案9】:

我认为在 Windows 中有 2 个选项

选项 1

    .py 文件扩展名更改为.pyw,并在第一行将python.exe 替换为pythonw.exe,如下所示(注意替换<your_username>\\<your_path_to>):

    #! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\pythonw.exe
    

    双击.pyw脚本文件运行。

    (可选)您还可以为.pyw 文件创建一个快捷方式,以自定义其名称图标键盘快捷方式 作为最终启动器

选项 2

    保留.py 文件扩展名,并在第一行将pythonw.exe 替换为python.exe,如下所示(注意替换&lt;your_username&gt;\\&lt;your_path_to&gt;):

    #! C:\\Users\\<your_username>\\<your_path_to>\\Scripts\\python.exe
    

    使用具有以下内容的.vbs(Visual Basic 脚本)文件作为.py 文件的启动器(您可以使用.vbs 文件也可以在不显示提示的情况下启动.bat 文件):

    Set WshShell = CreateObject("WScript.Shell") 
    WshShell.Run "C:\Users\<your_username>\<your_path_to>\Scripts\python.exe C:\Users\<your_username>\<your_path_to>\script.py", 0, True
    Set WshShell = Nothing
    

    双击.vbs 文件运行.py 脚本。

    (可选)您还可以为.vbs 文件创建一个快捷方式,以自定义其名称图标键盘快捷方式 作为最终启动器

【讨论】:

以上是关于在不出现 Windows 控制台的情况下运行 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不使用继承的情况下在viewDidAppear上调用某些代码

在不使用 X-Windows 的情况下在 Linux 中设置或读取 Caps Lock 状态

iOS - 如何在不按下按钮的情况下在视图控制器之间移动

如何在不运行 Regedit 的情况下读取和导出 Windows 注册表的子树?

如何在不使用 tkinter 打开控制台窗口的情况下运行 Python 脚本?

Python多重处理会在不退出文件的情况下失去活动性