[英]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.