[英]Suppress subprocess console output in a python windowed (Tkinter) app
我正在尝试使用python应用程序执行以下代码
pyinstaller -w -F script.py
:
def ffmpeg_command(sec):
cmd1 = ['ffmpeg', '-f','gdigrab','-framerate',config.get('FFMPEG_Settings','Framerate'),'-i','desktop',gen_filename_from_timestamp_and_extension()]
proc = subprocess.Popen(cmd1,stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
duration = sec
sleeptime = 0
while proc.poll() is None and sleeptime < duration:
# Wait for the specific duration or for the process to finish
time.sleep(1)
sleeptime += 1
proc.terminate()
当按下Tkinter按钮并从按钮单击处理程序调用此代码时,将运行以上代码。
我的问题是,当我运行exe时,它不会运行ffmpeg。 但是,如果我将命令设置为:
proc = subprocess.Popen(cmd1)
FFMPEG确实运行,我得到了想要的电影文件,但可以看到FFMPEG的控制台窗口。 因此,我最终在电影中获得了控制台窗口。 (我会尽量减少按钮单击处理程序中的Tkinter窗口)
我的问题是如何隐藏控制台窗口,并且仍然以我希望的方式运行FFMPEG? 我查看了以下线程,但无法正常工作: 如何在Python 2.7中隐藏子进程的输出, 用python最小化或隐藏打开程序
谢谢
谢谢@Stack和@eryksun! 我更改为以下代码:
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
cmd1 = ['ffmpeg', '-f','gdigrab','-framerate',config.get('FFMPEG_Settings','Framerate'),'-i','desktop',gen_filename_from_timestamp_and_extension()]
proc = subprocess.Popen(cmd1,stdin=subprocess.DEVNULL,stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,startupinfo=startupinfo)
实现了我想要的。 确实,正如@eryksun所建议的那样,仅重定向输出并没有做到这一点,我还必须使用stdin=subprocess.DEVNULL
来禁止所有输出。
这仍然留在控制台窗口中可见,但通过设置startupinfo
如上所述,控制台窗口被隐藏。 还验证了时间到期后FFMPEG消失了。
谢谢您的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.