Terry Carroll wrote:
I have a program that traverses the directory of a CDROM using os.walk. I do most of my work on Windows, but some on (Ubuntu) Linux, and I'd like this to work in both environments.

On Windows, I do something along the lines of this:

  startpoint="D:/"

What if the user has two CD drives? What if they have a second hard disk mounted on D:/, and a network drive on E:/, and use F:/ or A:/ or Z:/ for the CD drive?

If this program is for you, then it is fine to make assumptions about where the CD drive will be mounted, but don't make the mistake of thinking that they're not assumptions.


  for (root, dirs, files) in os.walk(startpoint):
     (stuff)

What would I use for startpoint in Linux? I've tried "/dev/sr0" and "/dev/sr0/"; neither work. (If I recall correctly, the for-loop just drops through; I'm not at my Linux box right now to confirm.)

As a general rule, don't touch anything in /dev unless you know what you're doing. /dev/sr0, and it's more user-friendly name /dev/cdrom, are devices, not folders. This is how low-level programs get access to the raw bytes being read from the device (in this case the CDROM drive) *before* it is turned into files.


A number of other mount points (like /dev/cdrom, I think) are links to /dev/sr0; and don't work either.

No, of course not. If they're links, that will mean that they are essentially nicknames or aliases. If Fred Smith doesn't respond when you talk to him, then calling him Freddy, Mr Smith, Hey you! or Frederick isn't going to work either.

It *does* work to start at "/media/VOLUMENAME", where VOLUMENAME is the volume ID of the disc; but my program will not know that. I need to be able to do this without knowing the volume name.

Yes, this is because you need to look at the mount point. The mount point is where the CDROM disk is mounted as a file system, in other words, where you can see the files on the disk *as files*. If you want to read the raw bytes off the disk, you open /dev/cdrom as a file and read from it.

On Unix and Linux systems, there are two conventions for mounting external media. One is that if you, the user, mount something by hand using the "mount" command, it gets placed in /mnt (old-school Unix sys admins had keyboards without vowels *wink*). Often people would use subdirectories under /mnt:

/mnt/cdrom
/mnt/floppy

are the two most common ones.

The other convention is that modern window/desktop managers like KDE and Gnome will automatically mount devices by name under /media. This is typically for CDs, DVDs, cameras and mobile phones with file storage, USB sticks and portable hard drives, etc.

If you only have one CD drive, and no other devices mounted, you can just look at /media and walk over that without caring what the CD drive is called. In other words, just use /media as the starting point, and let os.walk discover the name of the CD under it.

But if you might have an external hard drive plugged in, or a USB key, or similar, then you need to find out what the volume name of the mounted CD drive is. That's a good question and I don't have an answer right now. Let me think about it and get back to you.


--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to