Linux devicetype herausfinden

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Wie kann ich unter Linux den typ (usb-stick, sd-karte, festplatte) herausfinden?

Als Ausgangsinformationen habe ich nur was das Programm "df -T" liefert und das sieht bei mir so aus:

Code: Alles auswählen

Dateisystem   Typ   1K‐Blöcke   Benutzt Verfügbar Ben% Eingehängt auf
/dev/sda1     ext3    22888668   6973936  14752032  33% /
tmpfs        tmpfs      605336         0    605336   0% /lib/init/rw
varrun       tmpfs      605336       108    605228   1% /var/run
varlock      tmpfs      605336         0    605336   0% /var/lock
udev         tmpfs      605336       160    605176   1% /dev
tmpfs        tmpfs      605336        76    605260   1% /dev/shm
lrm          tmpfs      605336      2192    603144   1% /lib/modules/2.6.28-15-generic/volatile
/dev/sdb2  fuseblk   159469220 120146016  39323204  76% /media/BACKUP
/dev/sdb1  fuseblk   328914776  63097396 265817380  20% /media/DATEN
/dev/sdc1     vfat     3910112    994832   2915280  26% /media/Transcend
kann ich mit einem Zusatzprogramm herausbekommen was /dev/sdc1 ist?

Gruß
Andreas Hofmann[/code]
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
lunar

Mit "os.stat()" bekommst Du die Metadaten der Gerätedatei. Die kannst Du aufschlüsseln in Gerätetyp, sowie Major- und Minor-Nummer. Damit erreichst Du dann den sysfs-Bereich des dazugehörigen Geräts. Dort findest Du dann alle anderen Metadaten (u.a. den Bus, an dem das Gerät angeschlossen ist).

Code: Alles auswählen

import os, stat
from functools import partial
statres = os.stat('/dev/sdc1')
is_block = stat.S_ISBLK(statres.st_mode)
is_char = stat.S_ISCHR(statres.st_mode)
sysfs = partial(os.path.join, '/sys', 'dev')
name = '{major:minor}'.format(major=os.major(statres.st_rdev),
                                               minor=os.minor(statres.st_rdev))
if is_block:
    sysfspath = sysfs('block', name)
elif is_char:
    sysfspath = sysfs('char', name)
else:
    raise ValueError('Unknown device type')
print(os.listdir(sysfspath))

Alternativ kannst Du python-dbus und HAL verwenden.
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Coole Sache danke!

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Antworten