Я пытаюсь создать скрипт python, который запускает mdk3, когда переключатель включен (НИЗКИЙ), и убивает его, когда он выключен (ВЫСОКИЙ). Однако команда mdk3 всегда запускается при запуске скрипта, независимо от положения переключателя. Запуск сценария с переключателем в положении ON, а затем его выключение во время работы убивает команду, как и ожидалось. Тем не менее, он не запускается снова при повторном включении. Интересно, что текст, настроенный для печати, работает точно так, как и следовало ожидать. Мой код выглядит следующим образом:
import RPi.GPIO as GPIO
import time
import subprocess
import os
import signal
FSU = 'sudo mdk3 mon0 d'
pro = 'subprocess.Popen(FSU, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)'
# tell the GPIO module that we want to use the chip's numbering scheme
GPIO.setmode(GPIO.BCM)
# Set up GPIO16 as an input with internal pull-up resistor to hold it HIGH until it is pulled down to GND by the connected switch
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
running = False
while True:
if GPIO.input(16) == GPIO.LOW:
if running == False:
print('Button was pushed!')
pro
running = True
time.sleep(0.1)
elif running == True:
print('The process is running.')
time.sleep(0.1)
elif GPIO.input(16) == GPIO.HIGH and running == True:
os.killpg(os.getpgid(pro.pid), signal.SIGTERM)
print('Process killed.')
running = False
time.sleep(0.1)
elif running == False:
print('The process is not running.')
time.sleep(0.1)
else:
print('Critical error.')
time.sleep(0.1)
Причина, по которой я использую свой собственный l oop для опроса выводов GPIO вместо встроенного в библиотеку RPi.GPIO обнаружения событий, заключается в том, что не вызывало у меня ничего, кроме проблем, и делать это самому казалось проще. Буду признателен за любую помощь.
Редактировать: Я не уверен, почему я не думал о том, чтобы поместить этот вызов в кавычки. Теперь он не запускается при запуске скрипта, а запускается только один раз. Как в: я запускаю скрипт с выключенным выключателем, и он не запускается (как и ожидалось). Я включаю его, и он работает. Я выключаю его снова, и он успешно убивает скрипт. Однако его включение не перезапускает скрипт. Извините, если это плохое объяснение.