2011-05-30 11 views
7

मैं एक ऐप लिखने की कोशिश कर रहा हूं जो एक लिनक्स पीसी में सीरियल पोर्ट का उपयोग करता है, जिसमें पाइथन और पायसरियल का उपयोग किया जाता है। लेकिन इस पीसी में धारावाहिक बंदरगाहों का उपयोग कर अन्य ऐप्स हैं। मुझे यह कैसे पता चलेगा कि इसका उपयोग करने से पहले किसी अन्य पोर्ट द्वारा बंदरगाह पहले से खुला है या नहीं?पायथन पायसरियल। कैसे पता चलेगा कि एक बंदरगाह पहले से खुला है या नहीं?

धन्यवाद

उत्तर

1

चेक Serial.serial की वापसी उत्पादन, यह गलत अपवाद है कि पकड़ा जा सकता है

http://pyserial.sourceforge.net/pyserial_api.html http://pyserial.sourceforge.net/pyserial_api.html#serial.SerialException

उसके अलावा देता है, अगर बंदरगाह है वास्तव में बंद कर दिया जब आपका प्रोग्राम इसे एक्सेस करने का प्रयास करता है, फेंक दिया गया त्रुटि गैर-घातक है और यह असफल होने के कारण काफी स्पष्ट है।

14

बुरी तरह PySerial वेबसाइट पर प्रलेखित किया जाना लगता है, यह मेरे लिए काम करता है:

ser = serial.Serial(DEVICE,BAUD,timeout=1) 
if(ser.isOpen() == False): 
    ser.open() 

एक काल्पनिक उदाहरण के बारे में थोड़ी है, लेकिन आप विचार मिलता है। मुझे पता है कि इस सवाल को बहुत समय पहले पूछा गया था, लेकिन आज मेरे पास एक ही सवाल था और मुझे लगता है कि यह पृष्ठ किसी अन्य को ढूंढने की सराहना करेगा।

+0

बस एहसास हुआ कि सवाल इससे कुछ अलग पूछ रहा था, लेकिन मुझे उम्मीद है कि यह उत्तर अभी भी सहायक होगा! – StampyCode

+1

मुझे अगस्त 2017 में Google में सूची में से एक - शीर्ष मिला। इस तरह से पोस्ट करने के लिए धन्यवाद। यह मेरे प्रश्न का बिल्कुल जवाब दिया। मेरे मामले में इसका मतलब है कि कार्यक्रम पहले ही चल रहा है। मैं कंप्यूटर में एसएसएच का उपयोग करता हूं और कभी-कभी मेरे पास कंसोल से डेटा-लॉगर प्रोग्राम 'ssx'running है। पाइथन अब इसका उपयोग करने के लिए इसका उपयोग करने के लिए इसका उपयोग कर सकते हैं, और अन्य सभी को रोकने के लिए 'os.system ("killall ssx")' का उपयोग करें। यह तब होता है जब मैं परिवर्तन कर रहा हूं, लेकिन मेरे लिए खोजना पर्याप्त था। और यहाँ आप हैं। TNX। – SDsolar

0

मेरे आवेदन को विफल होने से रोकने की कोशिश करते समय मुझे यही मदद मिली क्योंकि इसे रोक दिया गया था और फिर से शुरू किया गया था।

import serial 

try: 
    ser = serial.Serial(# set parameters, in fact use your own :-) 
    port="COM4", 
    baudrate=9600, 
    bytesize=serial.SEVENBITS, 
    parity=serial.PARITY_EVEN, 
    stopbits=serial.STOPBITS_ONE 
) 
    ser.isOpen() # try to open port, if possible print message and proceed with 'while True:' 
    print ("port is opened!") 

except IOError: # if port is already opened, close it and open it again and print message 
    ser.close() 
    ser.open() 
    print ("port was already open, was closed and opened again!") 

while True: # do something... 
संबंधित मुद्दे