2011-12-02 8 views
10

Łączę się z moją tablicą Arduino za pomocą następującego kodu Pythona.Zabij proces, który zwiększa liczbę urządzeń lub zasobów: '/ dev/ttyUSB0'?

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

To generalnie działa, ale jakoś jakiś inny proces musi być uzyskiwania dostępu do płyty po restarcie dając mi błąd

serial.serialutil.SerialException: Nie można otworzyć port/dev/ttyUSB0: [ERRNO 16] Zajęte urządzenie lub zasób: '/ dev/ttyUSB0'

Podczas odłączania i ponownego podłączania wtyczki USB mogę normalnie wykonywać kod Pythona, bez wystąpienia błędu. Jak mogę uniknąć jakiegokolwiek innego procesu blokującego port? A jak znaleźć przyczynę tego błędu?

Odpowiedz

10

Można użyć

$ fuser /dev/ttyUSB0 

notować PID procesów wykorzystujących plik. Alternatywnie, jeśli obsługuje je komenda fuser, można użyć opcji -k, aby je zabić.

+0

To nie zawsze działa, na przykład, jeśli użyłeś ekranu GNU do uzyskania dostępu do urządzenia 'ttyUSBx', a następnie wyjdziesz używając' Ctrl-C', dostaniesz "Urządzenie zajęte" ale nie pojawi się z powyższe polecenie. – gbmhunter

+2

Jak to naprawić, to?!?! :RE – 0xbaadf00d