2011-06-16 1 views
0

J'ai besoin de copier un groupe de fichiers. Malheureusement, ces fichiers couvriront plusieurs DVD. Ce que je veux faire estpython Comment détecter un nouveau média sur le CD?

a) copy the files of the current DVD 
b) when complete, eject the media and prompt the user to insert the next DVD 
c) Detect when media is inserted 
d) validate that is is the desired DVD (if not do B again) 
e) copy files 
f) repeat as needed 

Im assez sûr que je sais comment faire tout cela, sauf pour l'étape C. Comment puis-je détecter quand un nouveau CD a été inséré?

+3

Quel OS cela sera en cours d'exécution sur? –

+0

Windows Server 2003. Python 2.7.1 – ccwhite1

Répondre

1

Je fini par utiliser une combinaison de wmi et ctypes

import wmi 
import os 
import time 
import wx 
import ctypes 

app = wx.PySimpleApp(0) 
c = wmi.WMI() 

for cdrom in c.Win32_CDROMDrive(): 
    status = cdrom.MediaLoaded 
    drive = cdrom.Drive 


checkFile = os.path.join(drive,'IWPCpatch-2','install.zip') 
print checkFile 

testForFile = os.path.exists(checkFile) 
while testForFile == False: 
    print 'file present', testForFile 

    for cdrom in c.Win32_CDROMDrive(): 
     status = cdrom.MediaLoaded 
     print 'Media present', status 

    #Eject 
    ctypes.windll.WINMM.mciSendStringW(u"set cdaudio door open", None, 0, None) 

    #Warn 
    sMessage = """ Please insert the media that contains the file """ + checkFile 

    successWarning = wx.MessageBox(sMessage, "WARNING") 

    #wait for new cd 
    for cdrom in c.Win32_CDROMDrive(): 
     status = cdrom.MediaLoaded 
     print 'Media present', status 

    while status == False: 
     for cdrom in c.Win32_CDROMDrive(): 
      status = cdrom.MediaLoaded 
      print 'Media present', status 
     time.sleep(5) 

    #test and exit loop or restart 
    testForFile = os.path.exists(checkFile) 


print 'FILE PASSED' 
0

pygame dispose d'un module de gestion du lecteur de CD/DVD: http://www.pygame.org/docs/ref/cdrom.html

+0

Selon la documentation relative aux CD audio –

+0

Je regarde maintenant pygame. Ils ont une méthode Get_Empty qui peut fonctionner. – ccwhite1

Questions connexes