【问题标题】:How to determine if a ffmpeg subprocess has fallen如何判断一个ffmpeg子进程是否已经掉线
【发布时间】:2020-07-21 23:18:31
【问题描述】:

我有问题

我想使用 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 会继续返回零代码表示一切正常

我该怎么办?

【问题讨论】:

    标签: python ffmpeg subprocess pid


    【解决方案1】:

    您可以使用proc.poll() 解决它。
    请参阅:Is there a way to check if a subprocess is still running?

    这是一个例子:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2012-05-19
      相关资源
      最近更新 更多