Finding count of currently open file descriptors.

Andrew McNamara andrewm at object-craft.com.au
Thu Aug 1 22:24:58 EDT 2002


>> How do I go about finding out the number of file descriptors currently 
>> open in a program? I'm trying to track down a file descriptor leak which 
>> may or may not be in library calls. Will I run into problems getting an 
>> accurate count due to the possible delay between doing a close and GC?

If there is a version of "lsof" that works on your system, you may want
to try it.

>This is part of the snippet of code, that I use, you can change it to
>suit
>your needs:
>
>from errno import EBADF
>try:
>  import os
>  max_fds = os.sysconf('SC_OPEN_MAX')
>except (ValueError),(e):
>  print "oh well, go the C route"
>else:
>  for fd in xrange(3,max_fds):
>     try:
>         os.close(fd)    # or do anything else to check if fd is valid

I would suggest os.fstat(fd) here - it can return data about the file
descriptor that might help you locate your leak (as well as being
non-destructive).

>     except (OSError),(e):
>         if e.errno == EBADF:
>             print "non existent fd"
>         else:
>             print "something really messed up"
-- 
Andrew McNamara, Senior Developer, Object Craft
http://www.object-craft.com.au/




More information about the Python-list mailing list