Python/Pyserial: чтение входящей информации из порта

Я только начал использовать pyserial, так как в конечном итоге мне нужно будет прочитать / сохранить информацию, поступающую с определенного порта. Используя следующий код, я просто печатаю используемый порт, а затем пытаюсь написать, а затем прочитать какой-то текст ("привет"). Порт печатается нормально, но вывод моей строки выходит как 5. Есть идеи, почему это так?

import serial
import sys
from time import sleep

try:
  ser = serial.Serial('\\.\COM8', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)

except:
    sys.exit("Error connecting device")

print ser.portstr

x = ser.write("hello")
print x

ser.close()  

Выход:

>>> 
\.\COM8
5
>>> 

Кроме того, есть ли простой способ для меня, чтобы имитировать поток текстовой информации, поступающей через порт, чтобы я мог проверить чтение / сохранение входящей информации?

Я использую Python 2.7 и "драйвер виртуального последовательного порта 8.0" [Eltima VSPD], чтобы эмулировать порт для тестирования этого материала.

Спасибо Стив

2 ответа

Решение

Вы можете сделать это таким образом, чтобы проверить это. Сначала создайте пару портов в управляющих портах.

Первый порт: COM199 Второй порт: COM188

Нажмите Добавить пару

На одной консоли / скрипте выполните следующие шаги:

>>> import serial
>>> ser = serial.Serial('COM196', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.S
BITS_ONE, bytesize=serial.EIGHTBITS)
>>> print ser.portstr
COM196
>>> x = ser.read(5) # It will be waiting till it receives data
>>> print x
hello

На другой консоли выполните следующие шаги:

>>> import serial
>>> s = serial.Serial('COM188')
>>> s.write("hello")
5L

Вы можете проверить это таким образом (или), создав программы на Python для каждого из портов

x = ser.write("hello")
print x

Вы пишете это как отправлено. Это не полученная информация. Вероятно, это записывает длину строки, которую вы отправили. Во-первых, вам нужно иметь скрипт на стороне клиента, который будет отвечать на вашу отправленную информацию.

И вы должны использовать что-то подобное на этом.

...     x = ser.read()          # read one byte
...     s = ser.read(10)        # read up to ten bytes (timeout)
...     line = ser.readline()   # read a '\n' terminated line
Другие вопросы по тегам