Hi David, Thanks for the bit of code on finding shares! I'd been using something a bit different (win32com.client stuff) but your code looks better.
I've found that "win32file.FindFilesIterator" (suggested to me by another person on this mailing list) allows the gui to remain responsive. Using the same code to execute the "os.listdir" hangs the gui! I've been using the wx.PostEvent and Python threading objects to implement multi-threading. Works very well! The wxPython demo illustrates the use of wx.PostEvent and Python multi-threading extremely well. Thanks again for your help! Dermot. -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of David Bolen Sent: 30 December 2004 17:39 To: python-list@python.org Subject: Re: Is there a better way of listing Windows shares other than using "os.listdir" [EMAIL PROTECTED] 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 -- http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list