detecter_usb : 2 niveaux /media/<user>/<label> + filtre fstype
This commit is contained in:
@@ -163,14 +163,43 @@ def recuperer_booth_password() -> dict:
|
||||
|
||||
|
||||
def detecter_usb() -> list[str]:
|
||||
"""Detecte les cles USB montees."""
|
||||
chemins_possibles = [Path("/media"), Path("/mnt")]
|
||||
"""Detecte les cles USB montees (cherche dans /media, /mnt et /media/<user>/)."""
|
||||
usb_trouvees = []
|
||||
for racine in chemins_possibles:
|
||||
if racine.exists():
|
||||
for sous_dossier in racine.iterdir():
|
||||
if sous_dossier.is_mount() or (sous_dossier.is_dir() and any(sous_dossier.iterdir())):
|
||||
usb_trouvees.append(str(sous_dossier))
|
||||
candidats = []
|
||||
|
||||
for racine in [Path("/media"), Path("/mnt")]:
|
||||
if not racine.exists():
|
||||
continue
|
||||
try:
|
||||
for niveau1 in racine.iterdir():
|
||||
if not niveau1.is_dir():
|
||||
continue
|
||||
if niveau1.is_mount():
|
||||
candidats.append(niveau1)
|
||||
else:
|
||||
# /media/<user>/ → descendre encore (udiskie)
|
||||
try:
|
||||
for niveau2 in niveau1.iterdir():
|
||||
if niveau2.is_dir() and niveau2.is_mount():
|
||||
candidats.append(niveau2)
|
||||
except PermissionError:
|
||||
pass
|
||||
except PermissionError:
|
||||
pass
|
||||
|
||||
for chemin in candidats:
|
||||
# Exclure les partitions système
|
||||
try:
|
||||
result = __import__("subprocess").run(
|
||||
["findmnt", "-no", "FSTYPE", str(chemin)],
|
||||
capture_output=True, text=True, timeout=3
|
||||
)
|
||||
fstype = result.stdout.strip()
|
||||
if fstype in ("vfat", "exfat", "ntfs", "ext4", "ext3", "hfsplus"):
|
||||
usb_trouvees.append(str(chemin))
|
||||
except Exception:
|
||||
usb_trouvees.append(str(chemin))
|
||||
|
||||
return usb_trouvees
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user