Я хочу показать статус на малине PI, используя светодиод. Для этого у меня есть программа на Python, которая будет запускать методы класса в фоновом режиме с помощью потоков.Run class in different Thread in Python
Это код, который я написал:
#!/usr/bin/python
import time
import os
import threading
status = 0
class LEDStatus(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
global status
self.current_value = None
self.running = True
def run(self):
global status
os.system("echo gpio | sudo tee /sys/class/leds/led0/trigger")
while True:
for i in xrange(0, status):
os.system("echo 1 | sudo tee /sys/class/leds/led0/brightness")
time.sleep(0.25)
os.system("echo 0 | sudo tee /sys/class/leds/led0/brightness")
time.sleep(0.25)
time.sleep(2)
os.system("echo mmc0 | sudo tee /sys/class/leds/led0/trigger")
if __name__ == '__main__':
leds = LEDStatus()
try:
leds.status = 3
leds.start()
while True:
print "X"
time.sleep(2)
except (KeyboardInterrupt, SystemExit): #Al pulsar ctrl+c
print "\nFinish"
leds.running = False
leds.join()
После того как программа приходит к этой линии os.system("echo gpio | sudo tee /sys/class/leds/led0/trigger")
, он ничего в методе run
не выполняется.
Что я делаю неправильно? Как изменить значение переменной статуса из основного метода?
Вы пытаетесь использовать Sudo в 'os.system' вызова Судо ждет пароль администратора, который необходимо ввести, но это может» t, так как у него нет трубки для его получения. –
Зависит от конфигурации sudo, NOPASSWD может играть. Или нет. Звучит так, как будто это правда. –
Я не думаю, что это проблема, я протестировал эти строки в основном потоке, и он отлично работает – ozat