我在 Raspberry Pi 上使用开放式照明架构,我需要能够通过一个按钮启动一个以恒定循环运行的节目,然后终止该节目并用一个按钮启动另一个节目。我正在使用带有 4 个按钮的 pyface 插件。我可以启动一个进程,但我不能用按钮终止一个进程。
如果您在命令行中使用 ola,您可以按 control-c 停止显示。我已经能够制作一个可以使用 tkinter 停止该过程的 gui,但相同的过程不适用于物理按钮。
from time import sleep
import os
import signal
import piface.pfio as pfio
import time
import threading
from subprocess import Popen
import subprocess
import Queue
pfio.init()
pfio.digital_read(0)
pfio.digital_read(1)
pfio.digital_read(2)
def olaserverStart ():
os.system('olad -l 3')
def show1():
os.system('ola_recorder -p /home/pi/Mermaid -i 0')
def stop():
try:
sig = signal.CTRL_C_EVENT
except AttributeError:
sig = signal.SIGINT
send_signal(sig)
def universe():
global proc3
proc3 = subprocess.Popen('ola_patch -d 12 -p 0 -u 0', shell=True)
proc3.wait()
def universe1():
global proc4
proc4 = subprocess.Popen('ola_patch -d 6 -p 0 -u 0', shell=True)
proc4.wait()
olaserverStart()
universe()
universe1()
while True:
if (pfio.digital_read(0) == 1):
p3 = subprocess.Popen('ola_recorder -p /home/pi/Mermaid -i 0', shell=True)
p3.wait()
if (pfio.digital_read(1) == 1):
try:
sig = signal.CTRL_C_EVENT
except AttributeError:
sig = signal.SIGINT
p3.send_signal(sig)
if (pfio.digital_read(2) == 1):
os.system('ola_recorder -p /home/pi/Mermaid -i 0')
sleep(0.15);