On Sat, 6 Nov 2010, Steven D'Aprano wrote:

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?


D:/ doesn't enter into it. That's on Windows, I'm asking about Linux. I used "D:/" to show a single example of what works on Windows to explain what I am looking for on Linux.

In practice, the drive specification will be coming from a config file. It would be D:? on some systems, E:/ on others or maybe both.

But my question is not about Windows, which I already have covered. My question is, to put it succinctly:

How can one use os.walk to walk a directory structure of a CDROM on LInux when the volume name is not known?

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.

No such luck:

t...@vraspberry:~$ ls -pal /mnt
total 8
drwxr-xr-x  2 root root 4096 2010-04-23 03:23 ./
drwxr-xr-x 23 root root 4096 2010-10-04 10:42 ../

t...@vraspberry:~$ ls -pal /mnt/cdrom
ls: cannot access /mnt/cdrom: No such file or directory
t...@vraspberry:~$ ls -pal /mnt/floppy
ls: cannot access /mnt/floppy: No such file or directory


The other convention is that modern window/desktop managers like KDE and Gnome will automatically mount devices by name under /media.

Yes, I mentioned this, but it requires knowing the volume name.

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 that has the same problem I already mentioned in the prior note: what if there's more than one device? The same thing you pointed out above about D:/


Well that was easy. You need to query the external tool volname, which
should be present on just about any Linux system.

Use the subprocess module to call "volname /dev/cdrom".

Aha, this looks like it will work; I was starting to think along these lines; I was thinking of reading the output of df, but this is cleaner.

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

Reply via email to