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