我有一个简单的脚本来检查 USB 设备 (UART) 是否已插入。 (操作系统 = Ubuntu 22.04,python 3.10)
import os
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
crw-rw----+ 1 root dialout 188, 0 Sep 25 10:42 /dev/ttyUSB0
只是好奇,ttyUSB0 是什么原因导致 os.path.xx 函数总是报告 False?
正如我所见,
crw-rw----+
,因此由 root 和组 dialout 拥有。
好像缺少权限。
os.path.exists()
使用 os.stat()
并且如果 os.stat() 由于权限而引发错误,os.path.exists()
会捕获它并返回 False。
直接用 os.stat() 试试:
import os
try:
os.stat('/dev/ttyUSB0')
except Exception as e:
print(f'Exception: {e}')
尝试使用 sudo 调用此文件或扩展权限