![](/img/trans.png)
[英]terminate/close cmd terminal while program is running using subprocess python
[英]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.