gpt4 book ai didi

python - 抑制 python 窗口 (Tkinter) 应用程序中的子进程控制台输出

转载 作者:行者123 更新时间:2023-12-01 02:52:37 26 4
gpt4 key购买 nike

我正在尝试在使用

制作的 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 按我想要的方式运行?我查看了以下线程但无法使其工作: How to hide output of subprocess in Python 2.7 , Open a program with python minimized or hidden

谢谢

最佳答案

谢谢@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 在时间到期后消失。

感谢您的帮助!

关于python - 抑制 python 窗口 (Tkinter) 应用程序中的子进程控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44572259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com