Нужна рука с этим скриптом для проверки статуса сервиса - PullRequest
1 голос
/ 16 марта 2020

Извините, я новичок в программировании. Я столкнулся с проблемой, которую я не могу понять, чтобы завершить сценарий ожидаемым способом.

Ожидается: этот сценарий python определит, что служба [Webmin] в данный момент активна или не включена, а затем включается индикатор, соответствующий GPIO.pinout. (если служба активна, индикатор будет включен, иначе он выключится)

Проблема сейчас: Когда я запустил сценарий, он продолжит возвращать «активный» в интерфейсе командной строки, и индикатор не включится. Я попытался изменить os.system('systemctl is-active webmin') на os.system('systemctl is-active --quiet webmin'), чтобы отключить звук на выходе, но свет по-прежнему не работает.

Пожалуйста, помогите мне проверить, если что-то закодировано неправильно, я попытался Google это для подобной информации и решения, но мало что помогло мне. Заранее спасибо.

#!/usr/bin/env python
import RPi.GPIO as GPIO
import os
import time

GREEN = 26
YELLOW = 19
RED = 13

# Pin Setup:
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(GREEN, GPIO.OUT)
GPIO.setup(YELLOW, GPIO.OUT)
GPIO.setup(RED, GPIO.OUT)


while True:

        check = os.system('systemctl is-active webmin')
        match = ('active')
        if check == match:
                GPIO.output(RED, True)
                time.sleep (1)

        else:
                GPIO.output(RED, False)
                GPIO.output(YELLOW, False)
                GPIO.output(GREEN, False)

1 Ответ

1 голос
/ 16 марта 2020

Использование os.system() возвращает вам только код ошибки команды, а не результат команды. Как указано в документации для os.system(), вам следует изучить возможность использования модуля subprocess для запуска команд ОС и получения их результатов.

import subprocess
check = subprocess.run(["systemctl", "is-active", "webmin"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if check.stdout == b"active":  # Your result may end in a newline: b"active\n"
    print("Webmin is active!")
...