You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何os.path系列函数无法识别Ubuntu下的/dev/ttyUSB0设备文件?

问题

在Ubuntu 22.04系统(Python 3.10环境)下编写了检测UART类型USB设备是否连接的脚本:

import os
path = os.path.join('dev', 'ttyUSB0')
print(f'DBG exists: {os.path.exists(path)}')
print(f'DBG isfile: {os.path.isfile(path)}')
print(f'DBG isdir : {os.path.isdir(path)}')
# print(f'DBG isdevdrive: {os.path.isdevdrive(path)}')
#  causes: AttributeError: module 'posixpath' has no attribute 'isjunction'
print(f'DBG islink: {os.path.islink(path)}')
# print(f'DBG isjunction: {os.path.isjunction(path)}')
#  causes: ditto
print(f'DBG lexists: {os.path.lexists(path)}')

脚本输出:

DBG exists: False
DBG isfile: False
DBG isdir : False
DBG islink: False
DBG lexists: False

但通过命令行执行ls -al /dev/ttyUSB0可确认设备文件存在:

$ ls -al /dev/ttyUSB0
crw-rw----+ 1 root dialout 188, 0 Sep 25 10:42 /dev/ttyUSB0

疑问:为何os.path系列函数始终返回False?


原因分析与解决方法
  • 路径错误是核心原因:脚本中os.path.join('dev', 'ttyUSB0')生成的是相对路径dev/ttyUSB0,而非系统中真实存在的绝对路径/dev/ttyUSB0。Python会以当前脚本的执行目录为基准查找该相对路径,自然找不到目标设备文件。
  • 设备文件类型特性:/dev/ttyUSB0是字符设备文件(权限位开头的c标识),os.path.isfile()会返回False,因为该函数仅判断是否为普通文件。但只要路径正确,os.path.exists()会返回True,因为exists()能识别设备文件、目录、符号链接等各类文件系统对象。
  • 平台专属API错误:os.path.isdevdrive()和os.path.isjunction()是Windows平台特有的API,Linux系统下不存在,调用会抛出AttributeError,这与设备文件本身无关。

解决方法:将路径改为绝对路径即可,修改后的代码示例:

import os
path = '/dev/ttyUSB0'  # 直接使用绝对路径,也可以用os.path.join('/dev', 'ttyUSB0')
print(f'DBG exists: {os.path.exists(path)}')
print(f'DBG isfile: {os.path.isfile(path)}')  # 仍返回False,因是字符设备
print(f'DBG isdir : {os.path.isdir(path)}')
print(f'DBG islink: {os.path.islink(path)}')
print(f'DBG lexists: {os.path.lexists(path)}')

内容的提问来源于stack exchange,提问作者JohnA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:00:16