python - 如何判断一个ffmpeg子进程是否掉线
问题描述
我有一个问题
我想使用 subprocess.popen 创建一个新的 ffmpeg 进程,找出他的 pid 并在 python 程序的主体中查看进程是否处于活动状态
args = shlex.split ('ffmpeg -i rtsp: //192.168.1.68: 8554 / mystream -f segment -strftime 1 -segment_time 5 13_REG1_CHANNEL3_% Y-% m-% d_% H-% M-% S-% s .mp3 ')
print (args)
proc = subprocess.Popen (args, stdout = subprocess.PIPE)
ch_pid = proc.pid
print (proc.pid)
proc.wait ()
print (proc.communicate ())
while (1):
if (os.system (str ('kill -0 {PID}'). format (PID = ch_pid)) == 0):
print ('proc is alive')
else:
break
在 while 循环中,我尝试通过 kill -0 pid 检查此进程 pid,如果一切正常且进程正在运行,此命令将返回零
但
如果 ffmpeg 会下降,则不会有任何变化
kill -0 pid 将继续返回零代码,一切都很好
我应该怎么办?
解决方案
您可以使用proc.poll()
.
请参阅:有没有办法检查子进程是否仍在运行?.
这是一个例子:
import shlex
import subprocess
#args = shlex.split ('ffmpeg -i rtsp: //192.168.1.68: 8554 / mystream -f segment -strftime 1 -segment_time 5 13_REG1_CHANNEL3_% Y-% m-% d_% H-% M-% S-% s .mp3 ')
args = shlex.split ('ffmpeg -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -vcodec copy -acodec copy BigBuckBunny_115k.mov')
print (args)
proc = subprocess.Popen (args, stdout = subprocess.PIPE)
ch_pid = proc.pid
print (proc.pid)
proc.wait ()
print (proc.communicate ())
while (1):
poll = proc.poll()
if poll is None:
print ('proc is alive')
# p.subprocess is alive
else:
print ('proc is dead')
break
这是一个更简洁的代码示例:
import shlex
import subprocess
import time
args = shlex.split ('ffmpeg -y -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -vcodec copy -acodec copy BigBuckBunny_115k.mov')
proc = subprocess.Popen(args)
while True:
poll = proc.poll()
if poll is None:
print ('proc is alive')
else:
print ('proc is dead')
break
time.sleep(1)
proc.wait()
推荐阅读
- hibernate - 原因:java.lang.IllegalArgumentException:无法将 java.lang.Long 字段 Photo.id 设置为 java.util.ArrayList
- laravel - Laravel Carbon 没有转换所需的格式
- javascript - 各级组件的递归渲染
- neo4j - 如何将多个列表合并为一个列表
- windows - 如何在没有“ModuleNotFoundError”的情况下导入安装在 Anaconda3 目录下的模块
- javascript - 映射可点击区域
- sql - 将 IDENTITY 设置为现有列
- php - 无法从 html 转换用户输入并在 sql 数据库中搜索
- php - 用于正确解析包含数组中每个项目的一个子元素的 XML 元素的 PHP 函数
- c# - c# 泛型接口,其中参数是泛型的