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]:
|
def detecter_usb() -> list[str]:
|
||||||
"""Detecte les cles USB montees."""
|
"""Detecte les cles USB montees (cherche dans /media, /mnt et /media/<user>/)."""
|
||||||
chemins_possibles = [Path("/media"), Path("/mnt")]
|
|
||||||
usb_trouvees = []
|
usb_trouvees = []
|
||||||
for racine in chemins_possibles:
|
candidats = []
|
||||||
if racine.exists():
|
|
||||||
for sous_dossier in racine.iterdir():
|
for racine in [Path("/media"), Path("/mnt")]:
|
||||||
if sous_dossier.is_mount() or (sous_dossier.is_dir() and any(sous_dossier.iterdir())):
|
if not racine.exists():
|
||||||
usb_trouvees.append(str(sous_dossier))
|
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
|
return usb_trouvees
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user