【发布时间】:2016-12-01 10:30:04
【问题描述】:
有什么方法可以运行 Python 脚本而不会暂时出现命令 shell? 使用“.pyw”扩展名命名我的文件不起作用。
编辑:使用 ShellExecute() 解决的问题
【问题讨论】:
-
你能告诉我们更多关于你是如何使用 ShellExecute() 的吗?
-
@bkbilly 我已经发表了我自己对这个问题的回答。您可以在下面找到它。
有什么方法可以运行 Python 脚本而不会暂时出现命令 shell? 使用“.pyw”扩展名命名我的文件不起作用。
编辑:使用 ShellExecute() 解决的问题
【问题讨论】:
简单的答案是将“LazyLibrarian.py”复制到“LazyLibraryian.pyw”并创建桌面快捷方式。然后将快捷方式放在你的启动文件夹中。
【讨论】:
使用 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;
【讨论】:
在自 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
如果你没有,你可以做几件事来解决这个问题:
如果您不是计算机的管理员,您可以将 .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 中的子项。因此,一个键及其子键最终可能会部分为当前用户定义,部分定义为本地机器。
assoc 和ftype 命令仅显示和修改HKLM\Software\Classes 键,这些键仅定义了用户在资源管理器中选择的一种可能性。还有其他地方可以定义文件关联,例如[HKCU|HKLM]\Software\Classes\Applications 和[HKCU|HKLM]\Software\Classes\SystemFileAssociations 下的默认值。用户当前的选择在HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts,但这只能[应该]使用 GUI 进行修改。
尝试使用 Python 的 pythonw.exe 可执行文件来启动您的脚本。
在 Windows 操作系统中,作为控制台应用程序的可执行文件(python.exe 没有 w 是控制台应用程序)运行时显示控制台窗口;另一方面,普通的 Windows 应用程序不会生成那个黑色的控制台窗口。
您可以在这个老问题中找到有关这两个可执行文件的详细信息:pythonw.exe or python.exe?
关于 Windows 不同类型的应用程序在这里:Difference between Windows and Console application
【讨论】:
system 使用 cmd 运行程序,当您从非控制台程序运行非控制台程序时,该程序会短暂闪烁控制台。如果您没有将参数传递给脚本,则可以改用os.startfile("script.pyw")。但首先修复 .pyw 文件关联。 [HKLM|HKCU]\Software\Classes\.pyw 的默认值应为 Python.NoConFile。然后使用右键单击“打开方式”对话框选择始终将 Python 用于 .pyw 脚本。如果有多个 Python 条目,请全部尝试直到它正常工作,但不要“在这台 PC 上寻找另一个应用程序”。