RE: Is there a better way of listing Windows shares other than us ing os.listdir

2004-12-31 Thread Doran_Dermot
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


RE: Is there a better way of listing Windows shares other than us ing os.listdir

2004-12-30 Thread Tim Golden
[EMAIL PROTECTED]

| 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.

It may be FindFilesIterator, recently added to the win32file
module in pywin32. I don't know if it's any more efficient
than an os.listdir (which may use it under the covers, for
all I know) but it certainly works:

code
import win32file

for file_data in win32file.FindFilesIterator (c:/temp/*):
  ( attr, ctime, atime, wtime, 
size_hi, size_lo, r0, r1, 
longname, shortname
  ) = file_data
  print longname
/code

TJG


This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk

-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Is there a better way of listing Windows shares other than us ing os.listdir

2004-12-30 Thread Doran_Dermot
Hi Tim,

That does the trick!  Now my gui remains responsive during the long search
time. 

Thanks!

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Tim Golden
Sent: 30 December 2004 10:54
To: python-list@python.org
Subject: RE: Is there a better way of listing Windows shares other than us
ing os.listdir

[EMAIL PROTECTED]

| 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.

It may be FindFilesIterator, recently added to the win32file
module in pywin32. I don't know if it's any more efficient
than an os.listdir (which may use it under the covers, for
all I know) but it certainly works:

code
import win32file

for file_data in win32file.FindFilesIterator (c:/temp/*):
  ( attr, ctime, atime, wtime, 
size_hi, size_lo, r0, r1, 
longname, shortname
  ) = file_data
  print longname
/code

TJG


This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk

-- 
http://mail.python.org/mailman/listinfo/python-list
-- 
http://mail.python.org/mailman/listinfo/python-list