【发布时间】:2012-07-03 02:51:18
【问题描述】:
注意:我使用 Python 2.7 和 pySerial 进行串行通信。
我发现这篇文章列出了两种方法:http://www.zaber.com/wiki/Software/Python#Displaying_a_list_of_available_serial_ports
此方法适用于 Windows 和 Linux,但有时会错过 Linux 上的虚拟端口:
import serial
def scan():
# scan for available ports. return a list of tuples (num, name)
available = []
for i in range(256):
try:
s = serial.Serial(i)
available.append( (i, s.portstr))
s.close()
except serial.SerialException:
pass
return available
print "Found ports:"
for n,s in scan(): print "(%d) %s" % (n,s)
而这个仅适用于 Linux,但包含虚拟端口:
import serial, glob
def scan():
# scan for available ports. return a list of device names.
return glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*')
print "Found ports:"
for name in scan(): print name
我想我可以在 Linux 上运行时使用第二种方法(包括虚拟端口的方法)进行平台检测,在运行 Windows 时使用第一种方法,但是 Mac 呢?
无论平台如何,我应该如何枚举串行端口(也是虚拟的)?
编辑
我发现了一些相关的问题:
【问题讨论】:
-
多年来我一直在做跨平台串行的东西,我总是把同一个愚蠢的平台检测、通配符、手动调整的怪物组合在一起。我很想看看你是否得到任何好的答案。
-
好吧,我想这就是它必须要做的事情:(。有时间我会在 Linux 和 Mac 上测试它,看看我是否不能把它包装成一个图书馆。
-
给它几天,有人可能有一个更优雅的解决方案:)
-
只是想我会在这里添加它。 bitpim 在多个平台上有相当多的 comscan 代码。从那里获取一些代码以构建跨平台串行端口枚举器可能很有用。 bitpim.svn.sourceforge.net/viewvc/bitpim/trunk/bitpim/src/…
-
@n9986:这看起来很有希望,谢谢!你应该把它作为一个答案。
标签: python cross-platform serial-port python-2.7 pyserial