2011-05-30 84 views
5

我需要的列表或列舉現有的串口, 直到現在我用這個方法enumerate_serial_ports(),但它與Windows 7不工作,你知道一些替代我怎樣才能找到可用的串行在Windows 7下的端口?pyserial枚舉端口

def enumerate_serial_ports(): 
    """ Uses the Win32 registry to return an 
     iterator of serial (COM) ports 
     existing on this computer. 
    """ 
    path = 'HARDWARE\\DEVICEMAP\\SERIALCOMM' 
    try: 
     key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path) 
    except WindowsError: 
     raise IterationError 

    for i in itertools.count(): 
     try: 
      val = winreg.EnumValue(key, i) 
      yield str(val[1]) 
     except EnvironmentError: 
      break 

我得到IterationError enter image description here

+0

什麼是不工作? – 2011-05-30 12:50:17

+0

到Space_C0wb0y:添加圖片 – Meloun 2011-05-30 12:56:44

+0

不會引發nnknown類異常(IterationError),讓回溯幫助我們瞭解真正的問題; – 2011-05-30 13:03:14

回答

3

你養的IterationError,但這一例外實際上並不存在。也許你應該試着提高EnvironmentError這個條件。

pySerial文檔包含一些用於查找串行端口的示例代碼。檢查他們:http://pyserial.sourceforge.net/examples.html#finding-serial-ports

+0

他的問題不在於IterationError。解決這個問題並不能解決問題。 – JBernardo 2011-05-30 13:23:47

+0

是的,但pySerial示例代碼可能。 – mrb 2011-05-30 14:15:50

+1

該URL現在看起來不適用。也許是http://pyserial.sourceforge.net/shortintro.html#testing-ports。 – 2013-04-22 23:14:11

15

現在有一個list_ports模塊內置pyserial。

In [26]: from serial.tools import list_ports 
In [27]: list_ports.comports() 
Out[27]: 
[('/dev/ttyS3', 'ttyS3', 'n/a'), 
('/dev/ttyS2', 'ttyS2', 'n/a'), 
('/dev/ttyS1', 'ttyS1', 'n/a'), 
('/dev/ttyS0', 'ttyS0', 'n/a'), 
('/dev/ttyUSB0', 
    'Linux Foundation 1.1 root hub ', 
    'USB VID:PID=0403:6001 SNR=A1017L9P')] 

該模塊還可以直接執行:

$ python -m serial.tools.list_ports 
/dev/ttyS0   
/dev/ttyS1   
/dev/ttyS2   
/dev/ttyS3   
/dev/ttyUSB0   
5 ports found 
+0

此代碼沒有爲我工作,因爲list_ports.comports()是一個發電機,我不得不這樣做: from serial.tools import list_ports for a in list_ports.comports():print(a) – RyanN 2015-03-02 04:57:08

+0

@RyanN你可以通過用list()包裝它來輕鬆地將一個發生器變成一個列表 – payne 2015-05-26 21:36:57

+0

list_ports似乎沒有找到所有可用的com端口,因爲我有一個USB串行設備,它不會使用list_ports生成器顯示,但realterm會發現它並將其放入可選端口列表中,而不會出現任何問題。它最終在COM20上,如果我用串口模塊打開COM20,它工作正常。但是如果我希望用戶能夠在現有端口中進行選擇,則必須使其顯示在可用端口列表中。 – RufusVS 2016-01-07 03:36:03

1

下面你可以看到我的輔助函數打印的姓名和可用的COM端口的描述,使用serial模塊:

from serial.tools import list_ports 
print(
    "\n".join(
     [ 
      port.device + ': ' + port.description 
      for port in list_ports.comports() 
     ])) 

示例輸出:

python.exe -u listSerialPorts.py 
COM4: Sierra Wireless NMEA Port (COM4) 
COM12: USB Serial Port (COM12) 
COM10: USB Serial Port (COM10) 
COM3: Intel(R) Active Management Technology - SOL (COM3) 
COM5: Sierra Wireless DM Port (COM5)