468,316 Members | 2,134 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,316 developers. It's quick & easy.

Is there a better way of listing Windows shares other than using"os.listdir"

Hi All,

I'm currently using "os.listdir" to obtain the contents of some slow Windows
shares. I think I've seen another way of doing this using the win32 library
but I can't find the example anymore.

My main problem with using "os.listdir" is that it hangs my gui application.
The tread running the "os.listdir" appears to block all other threads when
it calls this function.

Any ideas, comments or suggestions?

Thanks in advance,

Dermot.

Jul 18 '05 #1
1 2607
Do**********@emc.com writes:
I'm currently using "os.listdir" to obtain the contents of some slow Windows
shares. I think I've seen another way of doing this using the win32 library
but I can't find the example anymore.
Do you want the list of files on the shares or the list of shares
itself? If the files, you can use something like FindFiles, but I
don't expect it to be that much faster just to obtain directory names
(likely the overhead is on the network).

If you just want a list of shares, you could use NetUseEnum, which
should be pretty speedy.

(FindFiles is wrapped by win32api, and NetUseEnum by win32net, both parts
of the pywin32 package)

Here's a short example of displaying equivalent output to the "net
use" command:

- - - - - - - - - - - - - - - - - - - - - - - - -
import win32net

status = {0 : 'Ok',
1 : 'Paused',
2 : 'Disconnected',
3 : 'Network Error',
4 : 'Connected',
5 : 'Reconnected'}

resume = 0
while 1:
(results, total, resume) = win32net.NetUseEnum(None, 1, resume)
for use in results:
print '%-15s %-5s %s' % (status.get(use['status'], 'Unknown'),
use['local'],
use['remote'])
if not resume:
break
- - - - - - - - - - - - - - - - - - - - - - - - -

Details on the the arguments to NetUseEnum can be found in MSDN (with
any pywin32 specifics in the pywin32 documentation).
My main problem with using "os.listdir" is that it hangs my gui application.
The tread running the "os.listdir" appears to block all other threads when
it calls this function.


Yes, for a GUI you need to keep your main GUI thread always responsive
(e.g., don't do any blocking operations).

There are a number of alternatives to handling a long processing task
in a GUI application, dependent on both the operation and toolkit in
use. For wxPython, http://wiki.wxpython.org/index.cgi/LongRunningTasks
covers several of the options (and the theory behind them is generally
portable to other toolkits although implementation will change).

-- David
Jul 18 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by Giles Brown | last post: by
5 posts views Thread by Egor Bolonev | last post: by
7 posts views Thread by Paul Rubin | last post: by
1 post views Thread by New MSSQL DBA | last post: by
12 posts views Thread by junky_fellow | last post: by
43 posts views Thread by markryde | last post: by
3 posts views Thread by daniel.haude | last post: by
reply views Thread by NPC403 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.