Chr*_*nte 31 python cross-platform serial-port pyserial python-2.7
注意:我使用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)
Run Code Online (Sandbox Code Playgroud)
这个只适用于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
Run Code Online (Sandbox Code Playgroud)
我想我可以在Linux上运行时使用第二种方法(包括虚拟端口的方法)进行平台检测,这是运行Windows时的第一种方法,但是Mac呢?
无论平台如何,我应该如何枚举串口(虚拟)?
编辑
我发现了一些相关的问题:
这就是我一直在使用的.这是我上面发布的方法的混搭.不过,我仍然希望看到更好的解决方案.
# A function that tries to list serial ports on most common platforms
def list_serial_ports():
system_name = platform.system()
if system_name == "Windows":
# Scan for available ports.
available = []
for i in range(256):
try:
s = serial.Serial(i)
available.append(i)
s.close()
except serial.SerialException:
pass
return available
elif system_name == "Darwin":
# Mac
return glob.glob('/dev/tty*') + glob.glob('/dev/cu*')
else:
# Assume Linux or something else
return glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*')
Run Code Online (Sandbox Code Playgroud)
bitpim在多个平台上有相当多的comscan代码.可能有用的是从那里获得一些代码来构建跨平台串行端口枚举器.您可以直接在命令行中运行检测代码来测试它.
在Linux中,它似乎没有检测到'/ dev/ttyS'端口.在#378行下面添加以下行:
("/dev/ttyS", "Standard Serial Port", "serial"),
Run Code Online (Sandbox Code Playgroud)
作者已经很容易为串行端口添加不同类型的标识符.
在Mac中,它工作得很好.(有一个Arduino方便测试)
在Windows中,它成功检测到连接的端口(用于连接的FTDI连接器).需要pywin32.
使用pyserial,我尝试了以下方法:
python -m serial.tools.list_ports
似乎不适用于Windows.适用于Mac.适用于Linux.
Platform : Posix (/dev files)
Platform : Linux (/dev files, sysfs and lsusb)
Platform : Windows (setupapi, registry)
Run Code Online (Sandbox Code Playgroud)
我认为两者合并应该给(几乎)100%可靠的COM端口枚举器.
编辑:在Python 2.7中尝试了以上所有内容.
归档时间: |
|
查看次数: |
13601 次 |
最近记录: |