Вообще
if __name__ == '__main__':
мне помогло.
Сначала я подумал что проблема в флаге иинциализации контроллера железки, так как заметил, что если сначала выполнить комманду
stty -F /dev/ttyUSB0 raw speed 9600 -crtscts -hupcl
, то скрипт тоже начинает срабатывать. Я уже успел даже костыль в скрипте сделать такого плана:
cmd = 'stty -F /dev/ttyUSB0 raw speed 9600 -crtscts -hupcl'
import subprocess
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell = True)
p.wait()
Что в принципе тоже помогло. Но потом я заметил, что после перезагрузки линукса и до того как я запустил эту комманду инициализации и выполнил вышеописанные комманды в консольном режиме, у меня тоже все заработало. Так что я решил, что дело таки не в инициализации. Потом я попробывал
import serial
def main():
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write('1')
ser.close()
if __name__ == '__main__':
main()
И все заработало. Сейчас я еще раз все перепроверю. Может я случайно в крон пихнул
stty -F /dev/ttyUSB0 raw speed 9600 -crtscts -hupcl
? Но я перепроверю и отпишусь.
UPD. Действительно, если добавляю
if __name__ == '__main__':
, все пашет, а если убираю - нет. Может действительно, скрипт байт дослать до конца не успевает и порт закрывается? И кстати, если в другом окне открыть к примеру консоль на этом же девайсе и сделать:
python
>>>ser = serial.Serial('/dev/ttyUSB0', 9600)
,
то скрипт будет выполняться в любом случае. Может, у меня не успевает порт инициализироваться и я уже начинаю туда байты слать? Или исключено?