如何在Python中运行可执行文件而不弹出可执行文件的控制台窗口?

13 浏览
0 Comments

如何在Python中运行可执行文件而不弹出可执行文件的控制台窗口?

我有一个运行Tkinter GUI的Python脚本,其中包含一个按钮部件,该部件调用一个用C语言编写的可执行文件。但是,每次我点击该按钮时,运行该C可执行文件的控制台会弹出,然后在运行完毕后关闭。我使用以下代码调用该可执行文件:

import subprocess    
subprocess.call[args]

如何隐藏这个弹出窗口?因为我使用的是GUI,如果窗口无缘无故弹出,这样看起来不太好。

0
0 Comments

如何在Python中运行可执行文件而不弹出可执行文件的控制台?

问题原因:在Python中运行可执行文件时,会默认弹出一个控制台窗口,有时候我们希望在后台运行可执行文件而不显示这个窗口。

解决方法:使用subprocess.Popen()类的startupinfo参数。

代码如下:

import subprocess
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess.Popen(command, startupinfo=startupinfo)

如果需要向进程传递参数,可以将参数作为数组传递给popen函数:

subprocess.Popen(['program.exe','arg1','arg2'], startupinfo=startupinfo)

如评论中的Felix所指出的,如果希望子进程完全没有控制台窗口,则应使用DETACHED_PROCESS标志和subprocess.call函数。

代码如下:

DETACHED_PROCESS = 0x00000008
subprocess.call('program.exe', creationflags=DETACHED_PROCESS)

使用这种方法将隐藏控制台窗口。如果被调用的程序根本不需要控制台,那么使用DETACHED_PROCESS标志更好。

在创建一个分离的进程时,如果标准句柄没有设置为管道,最可靠的做法是将其设置为NUL(即subprocess.DEVNULL)。如果不设置标准句柄,有些程序可能会崩溃,因为它们假设控制台应用程序总是定义了标准句柄。

以上就是如何在Python中运行可执行文件而不弹出控制台窗口的解决方法。

0