【发布时间】:2018-02-27 11:16:49
【问题描述】:
对于我的一个项目,我需要一种方法来创建自定义媒体播放器类。为此,我创建了一个简单的类,该类使用给定的 url 调用 omxplayer 并写入标准输入字母,例如“p”暂停,“q”退出……等等 这是我的代码
import subprocess
import time
class MediaPlayer():
def __init__(self):
self.url = None
self.process = None
def play(self, url):
self.url = url
self.process = subprocess.Popen(['omxplayer', '-o', 'local', self.url], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
def stop(self):
self.process.stdin.write('q'.encode())
def toogle_pause(self):
self.process.stdin.write(b'p')
url = "/home/pi/Desktop/IOS MIRROR/films/Game.of.Thrones.S01E02.HDTV.VF.avi"
print('start')
media_player = MediaPlayer()
media_player.play(url)
time.sleep(15)
print('pause')
media_player.toogle_pause()
time.sleep(2)
print('resume')
media_player.toogle_pause()
time.sleep(10)
print('stop')
media_player.stop()
当我执行命令时,这在 python2.7 上运行良好
python omx.py
但是一旦我执行命令
python3 omx.py
我的写行都不起作用,视频播放但不会暂停和停止。没有打印错误,所以我真的被卡住了。 有关信息,我使用的是由 Raspbian 提供支持的 Raspberry Pi 3。 我需要它在 python3 上工作,因为我的 Mirror 项目正在使用 Python3
感谢大家的回答! 最好的问候,朱利安
【问题讨论】:
-
可能您正在写入外部程序的数据正在被行缓冲。每次写入后尝试
self.process.stdin.flush()。 -
哦,是的!它现在工作得很好!非常感谢,添加 flush() 方法后,一切正常!
标签: python-2.7 python-3.x subprocess stdin omxplayer