Я использую архитектуру открытого освещения на малине Pi, и мне нужно иметь возможность запускать шоу, которое работает в постоянном цикле с помощью кнопки, и убивать это шоу и запускать еще один кнопка. Я использую дополнение pyface с 4 кнопками. Я могу начать процесс, но я не могу убить процесс с помощью кнопок.Как убить подпроцесс с помощью кнопки
Если вы используете ola в командной строке, вы можете остановить шоу, нажав control-c. Я смог создать gui, который может остановить процесс с помощью tkinter, но тот же процесс не работает с физическими кнопками.
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);
, связанный с заголовком вопроса [начало/остановка подпроцесса с использованием кнопки tkinter] (https://gist.github.com/zed/4067619) – jfs