如何在没有Windows控制台的情况下运行Python脚本

时间:2016-07-27 12:07:47

标签: python windows

有没有办法在没有命令shell暂时出现的情况下运行Python脚本? 使用“.pyw”扩展名命名我的文件不起作用。

编辑:问题解决了ShellExecute()

5 个答案:

答案 0 :(得分:4)

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

在Windows操作系统中,运行显示控制台窗口的控制台应用程序python.exe不带w的可执行文件是控制台应用程序);另一方面,常规Windows应用程序不会产生黑色控制台窗口。

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

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

答案 1 :(得分:1)

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

如果某个用户的关联被篡改或被覆盖,则可能会有所不同。

在cmd:

中运行以下命令
pythonw.exe

我明白了:

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

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

  1. 重新安装/修复python安装(运行安装程序,它会建议修复安装)
  2. 如果您不是计算机的管理员,则可以将 Python.NoConFile="D:\Program Files\Python27\pythonw.exe" "%1" %* .pyw=Python.NoConFile 个文件与.pyw相关联。小问题,你必须在之后更改注册表项以添加额外的参数或删除.pyw文件中的参数将不会考虑它(它很少使用但仍然)

    pythonw.exe

答案 2 :(得分:0)

使用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 :(得分:0)

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

答案 4 :(得分:-1)

其他帖子中的此信息可能有所帮助:https://stackoverflow.com/a/30313091/6470259

  
      
  • python.exe 是用于启动CLI类型脚本的控制台(终端)应用程序 。 *除非从现有的控制台窗口运行,   python.exe 会打开一个新的控制台窗口。 * 标准流   sys.stdinsys.stdoutsys.stderr 已连接到。{   控制台窗口。 *执行同步

         
        
    • 如果创建了新的控制台窗口,它将保持打开状态,直到脚本终止。
    •   
    • 从现有控制台窗口调用时,提示将被阻止,直到脚本终止。
    •   
  •   
  • pythonw.exe 是一个GUI应用,用于启动GUI /无UI-at-all脚本。 * 无控制台窗口已打开。 *执行是   的异步

         
        
    • 从控制台窗口调用时,脚本只是启动,并且无论脚本是否仍在运行,提示都会立即返回。 * 标准流 sys.stdin,   sys.stdoutsys.stderr 不可用
    •   
    • 警告除非您采取额外步骤,否则会产生潜在的意外副作用:      
          
      • 未处理的例外会导致脚本以静默方式中止
      •   
      • 在Python 2.x中,只是尝试使用print()会导致这种情况发生(在3.x中,print()根本没有效果)。      
            
        • 在脚本中阻止,并了解详情,请参阅this answer   矿。
        •   
        • Ad-hoc ,您可以使用输出重定向谢谢,@ handle。 pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt(来自PowerShell:{{ 1}})捕获   文件中的stdout和stderr输出。如果你有信心使用   cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt是您的脚本无声地失败的唯一原因   print(),您对stdout输出不感兴趣,请使用   来自评论的@ handle&#39命令:pythonw.exe
            警告:直接调用pythonw.exe yourScript.pyw 1>NUL 2>&1脚本 时,此输出重定向技术似乎工作(而不是   将脚本文件路径传递给*.pyw)。 请告诉我   你知道为什么和/或它是否适合你。
        •   
      •   
    •   
  •   
     

您可以控制哪些可执行文件运行您的脚本   默认 - 例如从资源管理器中打开时 - 通过选择   正确的文件扩展名

     
      
  • pythonw.exe文件默认与*.py
  • 关联(调用)   
  • python.exe文件默认与*.pyw
  • 关联(调用)