У меня достаточно опыта в разработке, однако я не настолько опытен в Python и управлении процессами, как хотелось бы.Я пытаюсь создать сценарий подключения Bluetooth к устройству, которое требует сопряжения PIN-кода с компьютером LINUX.Ни один pygatt или pybluez не может обработать ввод PIN-кода.Поэтому я понял, что подпроцессы будут правильным решением!Проблема в том, что для сопряжения устройств Bluetooth требуются последовательные команды и анализ выходных данных, поэтому я не могу просто запускать команды из python.
Итак!То, что я смог сделать до сих пор: из подпроцесса импорта Popen, PIPE
p = Popen(['bluetoothctl'], stdin=PIPE, stdout=PIPE, bufsize=1)
p.stdin.write(b'agent') #First command in my procedurebluetoothctl
p.stdin.close()
for line in iter(p.stdout.readline, b''):
print line,
p.stdout.close()
p.wait()
это работает просто отлично!Он запрашивает у меня «агент зарегистрирован», и это то, что я получил бы, если бы я включил bluetoothctl, а затем включил агента в терминале.Проблема в том, что теперь я хотел бы продолжить и продолжить запись в этот процесс, например, «сканирование включено», чтобы запустить сканирование устройств, или «устройства», чтобы просмотреть список доступных устройств.Моя проблема, насколько я понял, это невозможно, так как мой код написан.Как только команда отправлена, мост закрывается, и если я пытаюсь сделать:
p.stdin.write(b'devices')
Я получу ошибку: запись в файл для закрытия.Тогда мой вопрос, очевидно, таков: как правильно продолжать отправлять и читать с этим подпроцессом?или подходящая альтернатива?Я читал о subprocess.communicate (), но не смог добиться какого-либо улучшения, он все равно закрывается.Я также читал о pexpect, но я не понимаю, как использовать его для решения моей проблемы.
Любая помощь с примерами кодов была бы ОЧЕНЬ БОЛЬШОЙ ... Я застрял с этой проблемой надолгоСейчас любая помощь будет очень кстати!
Большое спасибо, Винсент