Danke für Eure Hinweise!
@mutetella: Das mit " except WindowsError" ist natürlich Quatsch. Ursprünglich hatte ich nur "except" gesetzt und jetzt auch wieder. Damit funktioniert es ja auch einwandfrei. "WindowsError" habe ich nur gesetzt, weil bei einer Fehlermeldung ein "WindowsError" angezeigt wurde. Mein Gedanke war, unter einem anderen OS könnte der Fehler ja eine andere Bezeichnung habe, aber ansonsten die Ereignisbehandlung im Prinzip genau so funktionieren. Mit Linux und OSX habe ich noch nie gearbeitet, daher meine naive Frage.
@Sirius3 & @BlackJack: Ihr bezweifelt, dass meine Lösung robust funktioniert. Das verstehe ich, denn auch ich habe Bedenken. Allerdings habe ich den Code unter Windows 7 und Vista mit drei verschiedenen Laufwerken (auf jedem Rechner mit dem internen Laufwerk und einem externen) getestet.
Bei allen Tests bekam ich für die Objektgröße (os.stat(path).st_size)
- ohne eine Disk einen Fehler,
- mit einer Daten-Disk, einer Video-DVD und einer Blu-ray Disk einen Wert größer Null
- und eine Audio-CD den Wert Null.
Zwischenzeitlich fand ich nun allerdings zwei Daten-DVDs mit CDFS-Formatierung, bei denen der Wert für os.stat(path).st_size ebenfalls Null ist. Bei beiden ist allerdings der Wert für os.stat(path).st_mtime kleiner Null, so dass ich mit folgendem Code bisher keine Disk mehr fand, die als Audio-CD identifiziert würde, ohne es zu sein.
Code: Alles auswählen
# coding=utf-8
import os
from string import ascii_uppercase
gefunden = False
for c in ascii_uppercase:
path = c + ':'
try:
props = os.stat(path)
except:
continue
if os.path.isdir(path):
props = os.stat(path)
if props.st_size == 0 and props.st_mtime < 0:
print 'Im Laufwerk ' + path + ' ist eine Audio-CD eingelegt.'
gefunden = True
if not gefunden:
print 'Es wurde kein Laufwerk mit eingelegter Audio-CD gefunden.'
Umgekehrt fand ich auch keine Audio-CD, die nicht erkannt würde.
@BlackJack: Vom System angebotene konkrete Schnittstellen wären mir auch lieber gewesen, nur habe ich nichts gefunden, wie dies über Python zu erreichen ist. Ich bin mir sicher, dass es geht, das "Wie" hat sich mir nur nicht erschlossen.