[Tutor] CD ROM Drive
neven.gorsic at gmail.com
Wed Jul 16 22:10:22 CEST 2008
2008/7/16 Neven Goršić <neven.gorsic at gmail.com>:
> On Wed, Jul 16, 2008 at 2:02 PM, Tim Golden <mail at timgolden.me.uk> wrote:
>> Neven Goršić wrote:
>>> I am using Python 2.5.2 on WinXP Pro and I want to detect all disk drives.
>>> I have C:, D: and E: hard disks and F: DVD ROM.
>> Use WMI:
>> (mutatis mutandis)
>>> When I try to use os.access method with writing checking I get True
>>> testing DVD ROM Drive with DVD media inside (which is not writable).
>>> 1. Why? DVD disk is not writable!
>>>>>> import os
>>>>>> print os.access('F:\\',os.W_OK)
>> In short because os.access always returns True for
>> *directories* as opposed to *files* on Windows
>> because it only checks the read-only flag and the
>> read-only flag has no real meaning on a directory
>> on Windows.
>>> 2. When I remove DVD Disk from the drive I get unswer False.
>> It returns False when there's no media because that
>> constitutes an exception from the OS and the function
>> automatically returns False in that case.
>> [... snip stuff about "Insert disk..." ...]
>> Frankly this is a bit tricky. I'm not sure to what extent you can
>> get in ahead of the shell. A couple of possibilities, assuming
>> I've understood the situation. You can monitor device insertion
>> and removal either via the Win32 or shell APIs or via WMI (which, I imagine,
>> uses that API under the covers). The latest pywin32 modules have
>> added more support for this kind of thing, which you previously
>> had to do via ctypes.
>> If you're interested in pursuing this, I can rustle up some code.
>>> 3. Are there some other way to get list of all disk drives and DVD ROM
>>> I hoped that I can do that with modules that comes with standard
>>> Python instalation.
>> See above. Although my solution uses external modules, you *can* do
>> the same using ctypes, but why bother? Just install the
>>  http://pywin32.sf.net
>>  http://timgolden.me.uk/python/wmi.html
>> Tutor maillist - Tutor at python.org
> Thank you for your quick answer. I'll try suggested modules and let you now.
wmi package is not only elegant, but also capable of "silent"
interaction with Windows.
It doesn't couse Windows alerts which troubles me workig with
Thank you very much!
PS. In the begining wmi doesn't worked at all: import wmi passed, but
c = wmi.WMI()
caused a pile of errors. In the end I read Tony Cappellini
recomendation that we "may
need to run makepy manually on one or more of the following type libraries":
Microsoft WMI Scripting Library
WMI ADSI Extension Type Library
WMICntl Type Library
I run PythonWin, select Tools,Com Makepy and selecting previous libraries.
More information about the Tutor