我有一个python脚本,它监听特定的流并将其记录为:
subprocess.call(['ffmpeg', '-y', '-i', 'udp://streamurl:streamport', '-acodec', 'copy', '-f', 'mp3', 'filename.mp3'])
它还检查端口7777上的tcp连接(当流是活动时它连接到我的电脑上的这个端口)我想在每次端口7777上的连接关闭时终止子进程命令。我怎么能这样做?
答案 0 :(得分:1)
subprocess.call()
是一个阻塞调用 - 它等待子进程完成。
您可能希望使用subprocess.Popen()
,它会返回您可以与Popen.terminate()
交互的Popen object,并使用{{1}}终止。
答案 1 :(得分:1)
from subprocess import Popen, STDOUT, PIPE
from time import sleep
def connected(sock):
try:
sock.send(b'')
except:
return False
return True
handle = Popen(['ffmpeg', '-y', '-i', 'udp://streamurl:streamport', '-acodec', 'copy', '-f', 'mp3', 'filename.mp3'], shell=False, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
output = ''
while handle.poll() is None and connected(socket): # No exit code given, ergo command still running
output += handle.stdout.readline()
sleep(0.025)
if not connected(socket):
handle.terminate()
output += handle.stdout.read()
handle.stdout.close()
handle.stdin.close()
print(output)
注意:我不知道“套接字”是什么,但我假设只是一个常规的套接字。
我想指出,我绝不是一个完美的程序员,但是这会让你知道你需要做什么,而不是完美的,这会起作用:)