python - pySerial list_port accuracy -


मैं pySerial का serial.tools.list_ports.comports () का उपयोग करना चाहता हूं उपलब्ध COM पोर्टों को सूचीबद्ध करने के लिए ।

पढ़ना:

फ़ंक्शन पुनरावृत्त करता है जो तीन तारों के ट्यूप्ले पैदा करता है:

  • पोर्ट नाम जिसे इसे पारित किया जा सकता है धारावाहिक के लिए। धारावाहिक या धारावाहिक। सर्ल_फोर_अर्नल ()
  • मानव पठनीय रूप में विवरण
  • प्रकार की हार्डवेयर आईडी जैसे वीआईडी: यूएसबी-सीरियल एडाप्टर का पीआईडी ​​हो सकता है।

मैं एक विशिष्ट यूएसबी-सीरियल एडाप्टर को वीआईडी: पीआईडी ​​जोड़ी के साथ खोजने के लिए तीसरी स्ट्रिंग में दिलचस्पी है । मुझे इसे (आदर्श) Windows XP में और बाद में, मैक ओएस एक्स, और लिनक्स में काम करना होगा। मैंने उबंटू 13.10 और विंडोज 7 में प्यस्सेरियल 2.7 के साथ कोशिश की और एक जादू की तरह काम करती है, लेकिन डॉक्स भी कहते हैं:

यह भी ध्यान रखें कि रिपोर्ट स्ट्रिंग प्लेटफार्मों और ऑपरेटिंग सिस्टम में अलग-अलग है, यहां तक ​​कि एक ही डिवाइस के लिए।

नोट: समर्थन कई ऑपरेटिंग सिस्टम तक ही सीमित है। कुछ सिस्टम विवरण और हार्डवेयर आईडी पर उपलब्ध नहीं होगा।

क्या आपके पास इन अस्पष्टताओं का सम्मान करने के लिए वास्तविक दुनिया अनुभव है? अधिक विस्तृत जानकारी? कोई गैर-काम उदाहरण? सिस्टम में हार्डवेयर आईडी स्ट्रिंग पर भिन्नताएं?

बहुत बहुत धन्यवाद!

मुझे लगता है कि अगर आप चाहते हैं कि यह काम न करने का एक प्रति-उदाहरण चाहते हैं, तो यहां मुझे क्या मिलता है:

  & gt; & gt; & gt; Serial.tools.list_ports.comports () [('/dev/tty.Bluetooth-Incoming-Port', '/dev/tty.Bluetooth-Incoming-Port', '/dev/tty.Bluetooth-Incoming-Port') , ('/dev/tty.Bluetooth-Modem', '/dev/tty.Bluetooth-Modem', '/dev/tty.Bluetooth-Modem'), ('/dev/tty.usbserial-A1024XBO', '/ Dev / tty.usbserial-A1024XBO ',' /dev/tty.usbserial-A1024XBO ')]  

जहां एक एफटीडीआई यूएसबी-सीरियल एडाप्टर प्लग किया गया है। जो अपेक्षाकृत है, क्योंकि यहां comports () फ़ंक्शन:

  def comports (): "" "उपलब्ध पोर्टों के लिए स्कैन करें। डिवाइस नामों की सूची वापस।" "Devices = glob.glob  

जो साइगविन, बीएसडी, नेटबीएसडी, आईआरआईएक्स, एचपी- यूएक्स, सोलारिस / सनओएस, एएक्स ...

यह कैसे हो सकता है? ठीक है, क्योंकि मेरी पाइसरियल 2.6 संस्करण है, जो कि केवल छह महीने पुरानी है: -)

पीपी से नवीनतम संस्करण (2.7) में नवीनीकरण करने के बाद, यहां मुझे जो मिलता है:

  & gt; & gt; & gt; Serial.tools.list_ports.comports () [['/dev/cu.Bluetooth-Incoming-Port', 'n / a', 'n / a'], ['/dev/cu.bluetooth-modem', ' N / a ',' n / a '], [' /dev/cu.usbserial-A1024XBO ',' एफटी 232 आर यूएसबी यूएआरटी ',' यूएसबी वीआईडी: पीआईडी ​​= 403: 6001 एसएनआर = ए 1024 एक्सबीओ ']]  / Pre> 

इसलिए मूल रूप से, अपने setup.py में pyserial के नवीनतम संस्करण में एक संस्करण की जांच जोड़ें, या आपको समस्याएं मिल सकती हैं यद्यपि समर्थन अभी भी अन्य यूनिक्स स्वादों के लिए नहीं जोड़ा गया है ऐसा लगता है कि वीआईडी: पीआईडी ​​ स्ट्रिंग को ओएस विशिष्ट चीजों को पार्स करने से सीधे संभाला जाता है ताकि ये स्ट्रिंग सामान्य पर्याप्त हो सके। तो मूल रूप से मुझे लगता है कि आप इसे सुरक्षित रूप से कुछ तरह से प्राप्त कर सकते हैं: vid, pid = sp [2] .split ('') [1] .split ('=') [- 1] .split (':' ) (जो काफी बेवकूफी है, क्यों स्ट्रिंग का निर्माण करने के लिए पार्स मान को बाद में पार्स करना होता है?! मेरा मतलब है कि वे szHardwareID_str = 'यूएसबी वीआईडी: पीआईडी ​​=% s:% s एसएनआर = % S '% (m.group (1), m.group (2), m.group (4)) हम सिर्फ एक ट्यूपल के साथ खुश नहीं हो सकता!)

और अंत में, पाइसरियल अपने प्रलेखन के साथ असंगत दिखता है, क्योंकि यह कहते हैं: कुछ सिस्टम वर्णन और हार्डवेयर आईडी पर उपलब्ध नहीं होगा (कोई नहीं)। , जबकि यह वास्तव में 'n / a' / code>। मुझे लगता है कि यह पाइसरियल 2.8 में तय हो जाएगा: -)


Comments