2011-12-02 29 views
10

मैं अपने पाइथन कोड के साथ अपने Arduino बोर्ड से कनेक्ट करता हूं।प्रक्रिया को मारें जो डिवाइस या संसाधन को व्यस्त बनाता है: '/ dev/ttyUSB0'?

device=glob.glob("/dev/ttyUSB*")[0] 
time.sleep(1) 
arduino = serial.Serial(device, 115200, timeout=5) 

यह आम तौर पर काम करता है, लेकिन किसी भी तरह कुछ अन्य प्रक्रिया रिबूट के बाद बोर्ड तक पहुँचने किया जाना चाहिए मुझे त्रुटि है

serial.serialutil.SerialException: सका खुला बंदरगाह/dev/ttyUSB0 नहीं: [errno 16] डिवाइस या संसाधन व्यस्त: '/ dev/ttyUSB0'

यूएसबी प्लग को अनप्लग करने और दोबारा जोड़ने के दौरान, मैं त्रुटि के बिना सामान्य रूप से पाइथन कोड निष्पादित कर सकता हूं। बंदरगाह को अवरुद्ध करने वाली किसी अन्य प्रक्रिया से मैं कैसे बच सकता हूं? और मैं इस त्रुटि के कारण का पता कैसे लगा सकता हूं?

उत्तर

10

आप

$ fuser /dev/ttyUSB0 

फ़ाइल का उपयोग प्रक्रियाओं के PIDs सूची का उपयोग कर सकते हैं। वैकल्पिक रूप से, यदि आपका fuser कमांड इसका समर्थन करता है तो आप उन्हें मारने के लिए -k विकल्प का उपयोग कर सकते हैं।

+0

यह हमेशा काम नहीं करता है, उदाहरण के लिए, यदि आपने 'ttyUSBx डिवाइस' तक पहुंचने के लिए जीएनयू स्क्रीन का उपयोग किया है, और फिर 'Ctrl-C' का उपयोग करना छोड़ दें, तो आपको "डिवाइस व्यस्त" मिलेगा लेकिन यह दिखाई नहीं देगा उपरोक्त आदेश। – gbmhunter

+2

मैं इसे कैसे ठीक कर सकता हूं?!? : डी – 0xbaadf00d

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^