22

我使用以下 Python 代码连接到我的 Arduino 板。

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'

拔出并重新插入 USB 插头时,我可以正常执行 Python 代码,而不会发生错误。如何避免任何其他进程阻塞端口?以及如何找出此错误的原因?

4

3 回答 3

28

您可以使用

$ fuser /dev/ttyUSB0

列出使用该文件的进程的 PID。或者,如果您的fuser命令支持它,您可以使用该-k选项来杀死它们。

于 2011-12-02T16:37:20.933 回答
9

就我而言

$ fuser /dev/ttyUSB0

没有工作(它什么也没显示)。

但是,起作用的是以下内容:

$ sudo lsof /dev/ttyUSB0

这给了我一个正在使用我的串行端口的进程列表,我可以简单地kill使用它们PID(对应于列表中的第二列)。

于 2020-02-20T12:44:36.127 回答
0

跑:

$ ps ax

您将看到正在使用串行端口的进程。杀死那个进程。这为我解决了。

于 2020-03-26T13:25:17.083 回答