有没有办法在没有命令shell暂时出现的情况下运行Python脚本? 使用“.pyw”扩展名命名我的文件不起作用。
编辑:问题解决了ShellExecute()
答案 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"
如果你没有,你可以做几件事来解决这个问题:
如果您不是计算机的管理员,则可以将 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.stdin
,sys.stdout
和sys.stderr
已连接到。{ 控制台窗口。 *执行同步:
- 如果创建了新的控制台窗口,它将保持打开状态,直到脚本终止。
- 从现有控制台窗口调用时,提示将被阻止,直到脚本终止。
pythonw.exe
是一个GUI应用,用于启动GUI /无UI-at-all脚本。 * 无控制台窗口已打开。 *执行是 的异步强>:
- 从控制台窗口调用时,脚本只是启动,并且无论脚本是否仍在运行,提示都会立即返回。 * 标准流
sys.stdin
,sys.stdout
和sys.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