我正在玩我的Raspberry Pi GPIO。我将4个开关连接到GPIO。
我想实现这个功能
按住开关1.停止当前动画,播放M01.mp4。
按住开关2.停止当前动画,播放M02.mp4。
...
如果没有开关,播放器M00.mp4在循环中。
我只学习3天的python。我非常感谢你能帮我详细解释代码。
Popen.Terminate()或Kill()可以杀死,为什么不能杀死omxplayer?
#!/usr/bin/env python2.7
import subprocess,time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN)
GPIO.setup(24, GPIO.IN)
GPIO.setup(23, GPIO.IN)
GPIO.setup(22, GPIO.IN)
while True:
if GPIO.input(25) == True:
time.sleep(1)
playProcess=subprocess.Popen(['scratch'],stdout=True)
#Terminate() or Kill() can kill scratch.
playProcess=subprocess.Popen(['omxplayer','/home/pi/pyStudy/DSCF4021.MP4'],stdout=True)
#Terminate() or Kill() CAN NOT kill scratch.
time.sleep(5)
playProcess.terminate()
答案 0 :(得分:3)
你能做的最好的事情是通过管道发送命令,见下面的例子
global playProcess
playProcess=subprocess.Popen(['omxplayer','/home/pi/pyStudy/DSCF4021.MP4'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE, close_fds=True)
time.sleep(10)
playProcess.stdin.write('q')
有些时候这不起作用,那么你必须做一次冲洗
playProcess.stdin.flush()
答案 1 :(得分:0)
感谢您提供关于使用Python关闭omxplayer的提示等。
使用以下代码我得到了列出的错误
streamVideo = subprocess.Popen(['omxplayer', '-o', 'local', 'Media/TestA.mp4'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
time.sleep(10)
streamVideo.stdin.write('q')
streamVideo.stdin.flush()
错误: streamVideo.stdin.write(' Q') IOError:[Errno 32]管道损坏
我如何在Python中杀死omxplayer
streamVideo = Popen(['omxplayer', '-o', 'local', 'Media/TestA.mp4'])
time.sleep(10) # Time for the clip to play
streamVideo = Popen(['omxplayer', '-i', 'Media/TestA.mp4']) # Kills the Display