如何通过Python Subprocess杀死omxplayer

时间:2014-01-01 18:11:33

标签: python subprocess raspberry-pi gpio

我正在玩我的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()

2 个答案:

答案 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