我試圖運行在Python應用程序可執行以下代碼所做使用禁止子控制檯輸出(Tkinter的)應用程序
pyinstaller -w -F script.py
:當按下一個按鈕的Tkinter
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()
上面的代碼運行,該代碼是從按鈕單擊處理程序調用。
我的問題是,當我運行的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
謝謝
嘗試添加參數** shell = True ** to proc = subprocess.Popen(cmd1,stdout = subprocess.DEVNULL,stderr = subprocess.DEVNULL) – Stack
@Stack - 感謝您的評論。我試了一下修改於:'proc等於subprocess.Popen(CMD1,殼=真,標準輸出= subprocess.DEVNULL,標準錯誤= subprocess.DEVNULL)'但是如果你使用的是Windows,我仍然得到同樣的結果:( –
7或以上,你可能有一個壞的標準輸入手柄。通過'標準輸入= subprocess.DEVNULL'更換。但是,手柄設置爲'NUL'設備不會阻止控制檯的分配或隱藏。'殼= True'將通過'STARTUPINFO'隱藏它,但最好避免使用shell,並且最好不要連接到控制檯。定義'DETACHED_PROCESS = 8'並使用'creationflags = DETACHED_PROCESS'。 – eryksun