python - 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() 这很有趣,让我的收音机连续播放,但不继续脚本。我没有任何输出,脚本只是保留。
问题:当脚本执行其他操作时,如何允许“广播”进程在后台继续(同时播放音乐)?
解决方案
幸运的是,我自己解决了。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)
推荐阅读
- node.js - 如何使用 Cloud Functions for Firebase 更新 Firebase Cloud Firestore 数据库中的值
- reporting-services - 如何在 ssrs 报告中水平扩展父组而不是破坏页面
- c# - 为什么 tcp 请求仅在它是环回请求时才有效?
- ios - 从另一个应用程序返回后,Alamofire(URL)请求失败:Facebook
- java - ExceptionHandler 不处理异常
- xamarin.forms - Xamarin TapGestureRecognizer 似乎对“微滑动”过于敏感
- c - 何时唤醒读写器问题中的作者?在释放互斥锁之前还是之后?
- android - 如何开始一个没有父母的新活动?
- docker - BitBucket Pipeline 在 ssh 进入 DigitalOcean Droplet 后找不到容器
- python - Talos 多 GPU 功能