python os.path 不适用于 /dev/ttyUSB0

问题描述 投票:0回答:1

我有一个简单的脚本来检查 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?

python os.path
1个回答
0
投票

正如我所见,

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 调用此文件或扩展权限

© www.soinside.com 2019 - 2024. All rights reserved.