2016-07-15 75 views
0

我试图在能够运行Python脚本的其余部分之前找到设备连接到的正确com端口。使用Python无法检测到任何串行端口

import serial.tools.list_ports 
    ports = list(serial.tools.list_ports.comports()) 
    for p in ports: 
     print p 

这:

import wmi 
    c = wmi.WMI() 
    wql = "Select * From Win32_SerialPort" 
    for item in c.query(wql): 
     print item 

而且这样的:

我一直在使用这种尝试

def serial_ports(): 

    if sys.platform.startswith('win'): 
     ports = ['COM%s' % (i + 1) for i in range(256)] 
     print ports 
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): 
     # this excludes your current terminal "/dev/tty" 
     ports = glob.glob('/dev/tty[A-Za-z]*') 
    elif sys.platform.startswith('darwin'): 
     ports = glob.glob('/dev/tty.*') 
    else: 
     raise EnvironmentError('Unsupported platform') 

    result = [] 
    for port in ports: 
     try: 
      s = serial.Serial(port) 
      s.close() 
      result.append(port) 
     except (OSError, serial.SerialException): 
      pass 
    return result 

所有这些方法是我从其他堆栈中的人交换帖子;然而,对于这两种功能,当我尝试打印com端口列表时,我得到一个空白列表?任何帮助/见解将非常感谢提前感谢!

+0

你确实有任何COM端口?新的PC根本就没有,因为那是史前的传统硬件,而新机器正在免费使用 –

+0

是的!对不起,我在之前的文章中没有说清楚,但是当我用手动/硬代码输入com端口号时,它可以正常工作。我试图通过首先获取所有com端口列表并尝试所有端口来自动查找我的设备连接到的正确com端口的过程。 – Jennifer

+0

您是否找到解决方案?或者你仍然有一些问题? –

回答

0

像这样:

import serial,os,sys,glob 


def serial_ports(): 

    if sys.platform.startswith('win'): 
     ports = ['COM%s' % (i + 1) for i in range(256)] 
     print ports 
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): 
     # this excludes your current terminal "/dev/tty" 
     ports = glob.glob('/dev/tty[A-Za-z]*') 
    elif sys.platform.startswith('darwin'): 
     ports = glob.glob('/dev/tty.*') 
    else: 
     raise EnvironmentError('Unsupported platform') 

    result = [] 
    print ports 
    for port in ports: 
     try: 
      s = serial.Serial(port,9600) 
      s.close() 
      result.append(port) 
     except (OSError, serial.SerialException): 
      pass 
    return result 

print serial_ports() 

决不可以打开任何serial端口,而速度(时钟)的定义。

在Linux上:run as root,普通用户无法访问/dev(不要更改COS name_space动态创建权限坏主意!)。