Я надеюсь, что это простая глупая ошибка нуба, которую можно исправить, добавив где-то одну строку кода.
Я использую pySerial для считывания последовательных данных с USB-порта и их вывода на стандартный вывод. Я использую Mac OSX 10.6. Я открываю терминал и набираю «python», затем следующее:
>>> import serial;
>>> ser = serial.Serial('/dev/tty.usbserial-XXX', 9600, timeout=1);
>>> while True:
>>> if ser.inWaiting() > 0:
>>> ser.readline();
>>> [done, I hit enter...]
Это прекрасно работает. Он начинает выводить мои последовательные данные в точности, как я и ожидал. Отлично, я думаю, позвольте мне поместить это в собственный скрипт с аргументами командной строки, и тогда я могу вызвать его в любое время, когда захочу:
import sys;
import serial;
serialPort = sys.argv[1]
baudRate = sys.argv[2]
ser = serial.Serial(serialPort, baudRate, timeout=1)
while True:
if ser.inWaiting() > 0:
ser.readline()
В командной строке я набираю «python myScript.py [мой последовательный порт] 9600» и бездельничаю и жду красивого потока последовательных данных - но ничего не выходит. Это просто зависает, пока я не убью процесс.
Я подумал, ну, может, по какой-то причине это не работает - поэтому я вставил несколько отладочных отпечатков в код. Я обновляю цикл while, чтобы он выглядел так:
while True:
print("looping...")
print(ser.inWaiting());
if ser.inWaiting() > 0:
ser.readline()
Я запускаю его снова и получаю повторяющийся поток вывода «Looping ...» и «0». Я думаю, может быть, что-то не так с аргументами командной строки - поэтому я жестко запрограммировал порт и скорость передачи в скрипте, тоже самое.
Итак, почему это так? Является ли мое использование while True: каким-то образом блокирующим сценарий от принятия последовательных данных? Есть ли лучший способ сделать это?
Я полный нуб-питон. Я пишу этот сценарий, чтобы ускорить обмен данными между Adobe AIR и платой Arduino. Я надеюсь, что есть волшебная пуля, которую я могу завести сюда, чтобы она заработала - есть?