【问题标题】:How to run a Python script without Windows console appearing如何在不出现 Windows 控制台的情况下运行 Python 脚本
【发布时间】:2016-12-01 10:30:04
【问题描述】:

有什么方法可以运行 Python 脚本而不会暂时出现命令 shell? 使用“.pyw”扩展名命名我的文件不起作用。

编辑:使用 ShellExecute() 解决的问题

【问题讨论】:

  • 你能告诉我们更多关于你是如何使用 ShellExecute() 的吗?
  • @bkbilly 我已经发表了我自己对这个问题的回答。您可以在下面找到它。

标签: python windows


【解决方案1】:

简单的答案是将“LazyLibrarian.py”复制到“LazyLibraryian.pyw”并创建桌面快捷方式。然后将快捷方式放在你的启动文件夹中。

【讨论】:

    【解决方案2】:

    使用 ShellExecuteEx 函数。

    BOOL ShellExecuteEx(
    _Inout_ SHELLEXECUTEINFO *pExecInfo
    );
    

    这是 pExecInfo: ***nShow - 指定应用程序打开时如何显示的标志

    typedef struct _SHELLEXECUTEINFO {
      DWORD     cbSize;
      ULONG     fMask;
      HWND      hwnd;
      LPCTSTR   lpVerb;
      LPCTSTR   lpFile;
      LPCTSTR   lpParameters;
      LPCTSTR   lpDirectory;
      int       nShow;/*=0 if you don't want the console window to appear*/
      HINSTANCE hInstApp;
      LPVOID    lpIDList;
      LPCTSTR   lpClass;
      HKEY      hkeyClass;
      DWORD     dwHotKey;
      union {
        HANDLE hIcon;
        HANDLE hMonitor;
        } DUMMYUNIONNAME;
        HANDLE    hProcess;
    } SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
    

    【讨论】:

    • 您能详细说明您是如何到达那里的吗?谢谢!
    【解决方案3】:

    在自 2.5(可能更早)以来的所有 python 安装中,如果安装已正确完成,.py 文件将与 python.exe 相关联,.pyw 文件将与 pythonw.exe 相关联

    如果关联已被篡改或为特定用户覆盖,则可能会有所不同。

    在 cmd 中运行以下命令:

    ftype | find "pythonw"
    assoc | find ".pyw"
    

    我明白了:

     Python.NoConFile="D:\Program Files\Python27\pythonw.exe" "%1" %*
    .pyw=Python.NoConFile
    

    如果你没有,你可以做几件事来解决这个问题:

    1. 重新安装/修复python安装(运行安装程序,会提示修复安装)
    2. 如果您不是计算机的管理员,您可以将 .pyw 文件关联到 pythonw.exe。小问题,您必须在之后更改注册表项以添加额外的参数或在 .pyw 文件中删除参数不会考虑到它(它很少使用但仍然存在)

      [HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command] @="\"L:\\Portable_Python_2.7.3.1\\App\\pythonw.exe\" \"%1\" %*"

    【讨论】:

    • 最好修改HKLM\Software\ClassesHKCU\Software\ClassesHKCR 虚拟键是这两个树的合并视图,因此修改它的结果取决于当前定义的键。合并使用HKCR 的.reg 文件可以修改HKCU 中的子项(如果存在),否则修改HKLM 中的子项(如果存在),否则创建HKLM 中的子项。因此,一个键及其子键最终可能会部分为当前用户定义,部分定义为本地机器。
    • 请注意,cmd 的assocftype 命令仅显示和修改HKLM\Software\Classes 键,这些键仅定义了用户在资源管理器中选择的一种可能性。还有其他地方可以定义文件关联,例如[HKCU|HKLM]\Software\Classes\Applications[HKCU|HKLM]\Software\Classes\SystemFileAssociations 下的默认值。用户当前的选择在HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts,但这只能[应该]使用 GUI 进行修改。
    【解决方案4】:

    尝试使用 Python 的 pythonw.exe 可执行文件来启动您的脚本。

    在 Windows 操作系统中,作为控制台应用程序的可执行文件(python.exe 没有 w 是控制台应用程序)运行时显示控制台窗口;另一方面,普通的 Windows 应用程序不会生成那个黑色的控制台窗口。

    您可以在这个老问题中找到有关这两个可执行文件的详细信息:pythonw.exe or python.exe?

    关于 Windows 不同类型的应用程序在这里:Difference between Windows and Console application

    【讨论】:

    • 谢谢,现在我从 c 运行 python 文件,如下所示:system("python.pyw")。现在应该如何执行?
    • @David, system 使用 cmd 运行程序,当您从非控制台程序运行非控制台程序时,该程序会短暂闪烁控制台。如果您没有将参数传递给脚本,则可以改用os.startfile("script.pyw")。但首先修复 .pyw 文件关联。 [HKLM|HKCU]\Software\Classes\.pyw 的默认值应为 Python.NoConFile。然后使用右键单击“打开方式”对话框选择始终将 Python 用于 .pyw 脚本。如果有多个 Python 条目,请全部尝试直到它正常工作,但不要“在这台 PC 上寻找另一个应用程序”。
    猜你喜欢
    • 2010-12-13
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多