如何修复子进程.Popen锁定inpu

2024-06-17 09:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,显示一个菜单,提供录制和下载livestreams和VOD的选项。菜单设置如下:

Menu

1) Record
2) Download
3) ...

Choose your option: ...

该脚本调用位于不同脚本中的多个函数来请求、解析、记录或下载流。问题是,调用record函数时,subprocess.Popen会锁定我的菜单,直到流结束。我相信这与声明所有标准输入的函数有关?如何防止菜单锁定

我已经尝试使用subprocess选项stdin=open(os.devnull)。这不会锁定菜单,但会在流完成后导致僵死进程。使用像Thread(target=record.record,args=[json_data,ua_ffmpeg,username,id]).start()这样的线程都不起作用

菜单.py

import functions.record as record
  ...
  record.record(json_data,ua_ffmpeg,username,id)
  ...

记录.py

  def record(json_data,ua_ffmpeg,username,id):
    ...
    subprocess.Popen('ffmpeg -icy 0 -headers "%s" -i %s -c copy -loglevel quiet videos/%s/livestreams/%s.ts' % (ua_ffmpeg, hls_url, username, id), shell=True)

提前谢谢


Tags: 函数脚本idjsondata选项记录菜单