2013-05-05 86 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年以来还没有发布。我会毫不犹豫地声称“Under Linux,使用fdpexpect模块“。我不认为这很普遍。 – 2013-05-05 08:07:59

+0

是的,fdpexpect是pexpect模块的一部分,在python2中工作。 – 2013-05-05 08:15:10

+0

当设备启动时,我想执行命令通过串行启动来升级Fireware。所以,我想要像fdpexpect moudle那样与系列进行交互。 – 2013-05-05 08:23:29

回答

2

我刚刚得到这个工作本周末在Windows 7这是我如何做的:

首先,fdpexpect模块似乎是“聊天”可以用Python 2.7串口的唯一途径。最新的Python pexpect模块文档说它可以接受一个整数(int)文件描述符(如fdpexpect),但它不适用于我的Ubuntu 12.10安装。所以看起来fdpexpect是要走的路。如果获得来自:

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

二,fdpexpect模块需要一个文件描述符作为输入。虽然Python Pyserial模块(“import serial”)跨平台,但要使用它与fdpexpect,必须使用Serial.fileno()方法来获取串行端口的int文件描述符。但是Windows Python中不存在Serial.fileno()方法;它只存在于使用整数文件描述符的POSIX Python中。

幸运的是,它可以使用Cygwin工作。 Cygwin是Windows OS的免费POSIX环境。运行Cygwin的setup.exe并选择以下Cygwin的包:

python 
nano 
wget 

那么运行在Cygwin的的Bash shell提示符下输入以下命令:现在

# 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安装(而不是Windows本地Python),您可以将Serial.fileno()的输出传递给fdpexpect,并与sendline()和expect()通信。我正在使用这种方法在Windows下与两个不同的嵌入式系统进行通信。请注意,serial.Serial()构造函数在Unix下采用类似“/ dev/ttyS0”的字符串,但在Windows(包括Cygwin)下需要一个整数。对于COM3使用int(2),对于COM4使用int(3),依此类推。设备管理器会告诉你你应该使用什么COM端口号。

...

如果你谈论到一个Arduino欧诺最后要注意的......我的Windows 7系统上,在Arduino的堵塞引起的/ dev/TTYS ##立即显示出来,就像一个会期待。但是,串行端口在您使用Arduino软件串行终端,或Putty或Cygwin'screen'命令打开Arduino串行端口之前不起作用。一旦你在其中一个程序中打开它,它会正常工作,直到它被拔掉。我不知道为什么;它似乎是Arduino驱动程序中的一个错误。 (我的FTDI驱动没有这个问题用于我的非Arduino设备。)

+0

非常感谢! – 2013-06-17 13:41:11

+0

@Lennart:看到我上面的回复。尽管pyserial模块是“跨平台”的,但在Windows和Unix下API不同。 fdexpect模块需要Serial.fileno(),这在Windows下不存在,所以Cygwin是必需的。 – 2014-11-10 20:06:21

+0

链接http://python-distribute.org/distribute_setup.py现在似乎被破坏了。 – Dakkaron 2015-11-11 13:58:29

4

pyserial为串口提供了平台无关的接口。