Python: как заставить скрипт входить и выходить из терминала minicom?

Для входа в minicom и сохранения журнала я использую «sudo minicom -C nameoffile», но я хочу сделать это в цикле, открытие minicom может быть выполнено с помощью подпроцесса, но я не смог найти ничего для выхода из minicom в моем цикл и продолжить цикл, так как вам нужно ввести «ctrl-a, затем x» или «ctrl-a, затем q», а после необходимо нажать Enter для подтверждения. У кого-нибудь есть идея или предложение?


person Tolga Varol    schedule 22.08.2014    source источник
comment
Как долго вы хотите работать с миникомом? Как насчет того, чтобы запустить его как подпроцесс и убить извне (из родительского процесса)?   -  person Arnon Zilca    schedule 22.08.2014
comment
@ArnonZilca спасибо за ваш комментарий и извините за поздний ответ, но сможет ли он снова запуститься после того, как я его убью? Мне нужно запустить цикл по крайней мере в течение часа, и minicom должен быть зарегистрирован, закреплен, и строка будет добавлена ​​в список, затем она должна быть закрыта после того, как должна пройти та же процедура.   -  person Tolga Varol    schedule 23.08.2014
comment
Вы хотите запустить его, убить его, запустить его, убить его ... или вы хотите, чтобы он запускался все время и время от времени пробовал его. Меняется ли конфигурация или устройство от одного образца к другому?   -  person Arnon Zilca    schedule 24.08.2014
comment
@ArnonZilca да, я хочу запустить его, убить и сделать это в цикле, потому что я думаю, что если я буду запускать его все время, я не смогу использовать Bash для сбора выходных данных iwlist или предложений NMEA   -  person Tolga Varol    schedule 24.08.2014
comment
@ArnonZilca Нет, после подключения он всегда отображается как ttyUSB1, ttyUSB2 и ttyUSB3, я использую для сбора данных для этого устройства ttyUSB3, и я настраиваю и сохраняю ttyUSB3 в minicom.   -  person Tolga Varol    schedule 24.08.2014
comment
Понятно. Напишу свой ответ как ответ.   -  person Arnon Zilca    schedule 24.08.2014
comment
Это похоже на проблему XY. Возможно, вместо minicom используйте библиотеку Python, такую ​​как PySerial, для прямого доступа к последовательному порту.   -  person    schedule 24.08.2014
comment
@TolgaVarol Я согласен с Андре. И, как видите, я ответил за X, а не за Y.   -  person Arnon Zilca    schedule 24.08.2014


Ответы (1)


Первое (и очевидное) решение

может потребовать немного больше усилий (или нет - решать вам), и, вероятно, лучший способ сделать это - откройте устройство самостоятельно с помощью pySerial (и вот пример), а затем делайте с данными все, что хотите - записывайте их в файл, анализируйте, отправляйте в НАСА или выполняйте все перечисленные выше действия. :)



Если вы настаиваете на том, чтобы обойти это решение:

Одна возможность, о которой я могу думать ...

передает команду minicom на tee. когда вы проходите через tee, вы можете дать ему имя файла (для входа) и передать tee в качестве входных данных для вашего собственного двоичного файла / скрипта. Это должно позаботиться о ведении журнала + анализе ввода. (Я не пробовал это с minicom, и я не уверен, как вы таким образом выйдете из своей конвейерной программы).

Еще одна возможность, о которой я могу думать ...

перенаправляет в файл (>), а затем записывает другой двоичный файл / скрипт, который будет читать файл по мере его записи (как это делает tail -f). Вот пример чтения файл на python, пока он пишется.

Поскольку это последовательные данные, я предполагаю, что это довольно медленно (особенно NMEA), поэтому я не думаю, что у вас будет большая задержка, если вы запишете его в файл и прочитаете его с помощью другого двоичного файла / скрипта.

person Arnon Zilca    schedule 24.08.2014
comment
ЕСЛИ нет необходимости использовать minicom, использовать pyserial намного проще. Итак, +1 за первое предложение. Проблемы с задержкой записи файлов возникают из-за буферизации, быстрые данные на самом деле проще, чем медленные. - person DrV; 24.08.2014
comment
@DrV minicom необходим, потому что я не могу напрямую отправлять AT-команды из скрипта Python. - person Tolga Varol; 25.08.2014
comment
@Arnon Zilca, спасибо за ваш ответ, я только что написал код для чтения через pyserial, но он не читает AT-команды, он просто читает A из модуля 3G. ser3g = serial.Serial (/ dev / ttyUSB3, 115200, timeout = 5) time.sleep (1) ser3g.write (AT + CSQ) time.sleep (1) response = ser3g.read () print ›› file, date, ',', val [: 42], ' , ', данные,', ', ответ - person Tolga Varol; 25.08.2014
comment
@Arnon Zilca, единственное, что мне сейчас приходит в голову, это захватить терминал minicom внутри цикла, но я понятия не имею, как выйти из minicom внутри цикла, например, запустить его - убить его - запустить его .... и так далее . Для захвата того, что я делаю, это 'sudo' 'minicom' '-C' 'filename', знаете ли вы, как я могу выйти из терминала minicom в цикле? - person Tolga Varol; 25.08.2014
comment
Оба решения (кроме pySerial) предлагают вам сделать это без run-kill-run-kill. Я думаю, что подключение minicom к tee, а затем к скрипту python парсера или перенаправление minicom в файл, а затем чтение из файла в другом процессе будет намного проще. - person Arnon Zilca; 25.08.2014
comment
@ArnonZilca еще раз спасибо, мне удалось сделать это без использования minicom, что я сделал не так, я не читал нужную строку через pyserial, pyserial работает, но мне не удалось использовать minicom внутри цикла, но это не обязательно. - person Tolga Varol; 25.08.2014