首页 > 解决方案 > Subprocess.Popen 几秒钟后停止(或故障)

问题描述

我是一个完整的初学者,因此对任何错误表示歉意。这是我在 Python 3.5 中的代码。它在 Raspberry Pi 3 上的 Raspbian 中执行。

import subprocess

radio = subprocess.Popen(["mplayer", 'http://edge-bauerabsolute-02-gos1.sharp-stream.com/absolute90s.mp3?'], shell = False , stdout=subprocess.PIPE)

print ("Other code - no waiting for the subprocess to finish")

收音机播放约 30 秒,然后停止。我希望它在后台运行而无需等待子进程结束的脚本。此外,在 Linux 中,如果我停止脚本,收音机会作为 mplayer 的运行进程再次返回(所以 python 脚本必须以某种方式停止它?)

似乎子进程继续,但音乐/声音停止。它似乎与互联网连接无关,如果我等待它也不会重新启动。我试过做 radio.communicate() 或 radio.stdout.read() 这很有趣,让我的收音机连续播放,但不继续脚本。我没有任何输出,脚本只是保留。

问题:当脚本执行其他操作时,如何允许“广播”进程在后台继续(同时播放音乐)?

标签: pythonraspberry-pisubprocessraspbianmplayer

解决方案


幸运的是,我自己解决了。subprocess.PIPE 显然停止/干扰了进程,所以我没有像 stdout=subprocess.PIPE 那样完成 DEVNULL :

DEVNULL = open(os.devnull, 'wb')
radiostream = subprocess.Popen(["mplayer", 'http://edge-bauerabsolute-02-gos1.sharp-stream.com/absolute90s.mp3?&'], shell = False, stdout=DEVNULL, stderr=DEVNULL)

推荐阅读