簡體   English   中英

Python使用子進程運行cmd命令(ffmpeg)並在執行某些代碼之前等待cmd關閉

[英]Python running a cmd command(ffmpeg) with subprocess and wait for cmd to close before executing some code

所以我使用 ffmpeg 來調整視頻大小,這需要一點時間,所以在代碼繼續之前我必須等待 cmd 關閉。 我一直無法找到解決方案,我希望真正了解他們的東西的人可以教我一種方法。 我可能只是在做一些遲鈍的事情......無論如何我已經嘗試了多種方法,例如使用 subprocess.Propen() 然后使用 pope() 來查看它何時不返回“None”還嘗試了 subprocess.run() 和 subprocess.CompletedProcess 之類的東西() 但我就是無法讓它工作,有人可以解釋一下是否有辦法做到這一點,而我只是做錯了? :)

這是我嘗試過的示例

p = subprocess.Popen("start ffmpeg -y -i "+DIR+"/post.mp4 -vf scale="+str(nW)+":"+str(nH)+" "+DIR+"/post_r.mp4", shell=True)
    while p.poll() is None:
        time.sleep(1)
        print("alive")
    else:
        print("cmd exited")

此外,每當我放置 shell=False 時,它​​都會立即中斷,並且出現此錯誤:FileNotFoundError: [WinError 2] The system cannot find the file specified

如果您只是需要在等待時運行進程,請不要使用subprocess.Popen() Legacy subprocess.call()或現代subprocess.run()正是為此用例設計的。

使用shell=False您需要自己將命令行拆分為一個列表。 為方便起見,您可以調用shlex.split() ,但自己做並不難。

subprocess.run(['ffmpeg', '-y', '-i', DIR+"/post.mp4",
    '-vf', 'scale=' + str(nW) + ":" + str(nH), DIR+"/post_r.mp4"])

start看起來像是在 Windows 上,當然start也是 shell 的一個功能; 如果您沒有外殼,則start不可用(但也沒有用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM