有没有办法在没有命令行窗口瞬间出现的情况下运行Python脚本?
使用".pyw"扩展名命名文件不起作用。
尝试使用Python的pythonw.exe
可执行文件来启动您的脚本。
在Windows操作系统中,控制台应用程序(没有w
的python.exe
是一个控制台应用程序)会显示控制台窗口;而常规的Windows应用程序则不会生成黑色控制台窗口。
您可以在这个旧问题中找到有关这两个可执行文件的详细信息:pythonw.exe或python.exe?
关于Windows不同类型的应用程序,请参阅这里:Windows和控制台应用程序之间的区别
.py
文件将与python.exe
相关联,而.pyw
文件将与pythonw.exe
相关联。ftype | find "pythonw"
assoc | find ".pyw"
我得到:
Python.NoConFile="D:\Program Files\Python27\pythonw.exe" "%1" %*
.pyw=Python.NoConFile
如果您不是计算机管理员,您可以将.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\Classes
或 HKCU\Software\Classes
。HKCR
虚拟键是这两个树的合并视图,因此修改它的结果取决于当前定义的键。合并使用 HKCR
的 .reg 文件可能会修改 HKCU
中的子键(如果存在),否则会修改 HKLM
中的子键(如果存在),否则会在 HKLM
中创建子键。因此,一个键及其子键可能会部分地为当前用户定义,部分地为本地机器定义。 - Eryk Sun使用ShellExecuteEx函数。
BOOL ShellExecuteEx(
_Inout_ SHELLEXECUTEINFO *pExecInfo
);
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;
system
使用cmd来运行程序,当你从非控制台程序运行非控制台程序时,它会短暂地闪现一个控制台。如果你没有向脚本传递参数,可以使用os.startfile("script.pyw")
代替。但首先要修复.pyw
文件关联。默认值为[HKLM|HKCU]\Software\Classes\.pyw
应该是Python.NoConFile
。然后使用右键“打开方式”对话框选择始终使用Python来处理.pyw
脚本。如果有多个Python条目,请尝试所有条目,直到正确工作,但不要“在此计算机上查找其他应用程序”。 - Eryk Sun