2013-05-05 1 views
1

Под Linux, используйте fdpexpect модуль для взаимодействия с последовательным портом, такие как:Python - В Windows, как взаимодействовать с последовательным портом?

fd = os.open(TTY, os.O_NONBLOCK|os.O_RDWR|os.O_NOCTTY) 
child = fdpexpect.fdspawn(fd) 

В Windows, как реализовать выше?

+1

fdpexpect, похоже, является частью модуля pexpect, который не выпускался с 2008 года. Я бы смутился, заявив: «Под Linux, используйте модуль fdpexpect ». Я не думаю, что это обычное дело. –

+0

Да, fdpexpect является частью модуля pexpect, работающего в python2. –

+0

Когда устройство загружается, я хочу выполнить команды для обновления fireware через последовательный запуск. Итак, я хочу взаимодействовать с сериалом, как fdpexpect moudle. –

ответ

2

Я только что получил эту работу в течение этого уик-энда на Windows 7. Вот как я это сделал:

Во-первых, модуль fdpexpect, похоже, единственный способ «общаться» с последовательным портом в Python 2.7 , В последнем документе pexon pexpect docs говорится, что он может принимать дескриптор файла integer (int) (например, fdpexpect), но он не работает на моей установке Ubuntu 12.10. Похоже, что fdpexpect - это путь. Получите если от:

http://www.opensource.apple.com/source/lldb/lldb-69/test/pexpect-2.4/fdpexpect.py

Во-вторых, модуль fdpexpect требует дескриптор файла в качестве входных данных. Хотя Python Pyserial module («import serial») является кросс-платформенным, для его использования с fdpexpect необходимо использовать метод Serial.fileno(), чтобы получить дескриптор int file для вашего последовательного порта. Но метод Serial.fileno() не существует в Windows Python; он существует только в POSIX Python, где используются дескрипторы целочисленного файла.

К счастью, его можно использовать для работы с Cygwin. Cygwin - это бесплатная POSIX-среда для ОС Windows. Запустите setup.exe Cygwin и выберите следующие Cygwin пакеты:

python 
nano 
wget 

Затем выполните следующие команды в командной строке Cygwin Bash оболочки:

# Install 'distribute', so we can use it to install 'pip': 
wget.exe http://python-distribute.org/distribute_setup.py 

# Execute the downloaded script: 
python distribute_setup.py 

# Now do the 'pip' installer: 
wget --no-check-certificate https://raw.github.com/pypa/pip/master/contrib/get-pip.py 

python get-pip.py 

# Install pyserial for serial comms w/pexpect support via Serial.fileno() 
pip install pyserial 

Теперь, если вы запустите скрипт Python под Установка Cygwin Python (а не родной Python для Windows) позволяет передавать выходные данные вашего Serial.fileno() в fdpexpect и связываться с sendline() и expect(). Используя этот метод, я общаюсь с двумя различными встроенными системами под Windows.

Обратите внимание, что конструктор serial.Serial() принимает строку типа «/ dev/ttyS0» под Unix, но под Windows (включая Cygwin) требуется целое число. Используйте int (2) для COM3, int (3) для COM4 и т. Д. Диспетчер устройств сообщит вам, какие номера COM-портов вы должны использовать.

...

одно замечание, если вы говорите с Arduino Uno ... на моей системе Windows 7, вставив Arduino вызывает/DEV/TTYs ## показать сразу, как один ожидал бы. Тем не менее, последовательный порт не работает до тех пор, пока вы не будете использовать последовательный терминал программного обеспечения Arduino, ИЛИ Putty, или команду Cygwin 'screen', чтобы открыть последовательный порт Arduino. После того, как вы открыли его в одной из этих программ, он отлично работает, пока не отключится. Я не знаю почему; это, кажется, ошибка в драйвере Arduino. (У меня нет этой проблемы с помощью моего драйвера FTDI для моего устройства, отличного от Arduino.)

+0

Большое спасибо! –

+0

@ Lennart: Смотрите мой ответ выше.Хотя pyserial модуль является «кросс-платформенным», API отличается от Windows и Unix. Для модуля fdexpect требуется Serial.fileno(), которого нет в Windows, поэтому требуется Cygwin. –

+0

Теперь ссылка http://python-distribute.org/distribute_setup.py кажется сломанной. – Dakkaron

4

pyserial обеспечивает независимый от платформы интерфейс для последовательных портов.

Смежные вопросы