问题描述
我已经使用cx_freeze为我的python程序tool.box构建了一个MSI。
一切正常-但是,我在setup.py中实现了此代码段:
base = None
if (sys.platform == "win32"):
base = "Win32GUI"
隐藏通常运行最终cexe_freeze生成的.exe时打开的cmd窗口。
这正常工作,现在启动时,我看不到空白的cmd窗口。
但是-在我的程序中,我有几个按钮分别调用ffplay.exe和ffmpeg.exe-以前,没有该代码段,我可以运行该程序,当我单击这些按钮时,不会显示CMD窗口-现在, ,它可以-并且显示ffplay或ffmpeg的输出。
在main.py中,我具有以下命令:
command_play = [ffplay_path,originalAudio,"-ss",str(actual_start_segment),"-t","10","-nodisp","-autoexit"]
ffmpeg_command = FFmpeg(
inputs={originalAudio: None},outputs={new_filename: ['-ss','-to',str(actual_end_segment),'-async','1','-strict','-2','-ar','44100','-ab','56k','-ac','-y']}
)
两者都设置为不显示CMD窗口。
他们似乎只有在我编译时才这样做。关于如何隐藏这些内容的任何建议,以便我的基于GUI的程序在最终用户使用它的功能时都不会出现CMD窗口?
解决方法
最后是一个简单的解决方案,它使用了Python 3.7中的新CREATE_NO_WINDOW标志。
调用ffplay或ffmpeg时的新代码如下:
from subprocess import CREATE_NO_WINDOW
def play_beginning(command_play):
subprocess.Popen(command_play,stderr=subprocess.DEVNULL,creationflags=CREATE_NO_WINDOW)