2013-05-05 215 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爲串口提供了平臺無關的接口。