Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #10866

Re: PyWhich

Date 2011-08-04 13:24 -0500
From Tim Chase <python.list@tim.thechases.com>
Subject Re: PyWhich
References <j1e45l$jtg$1@speranza.aioe.org>
Newsgroups comp.lang.python
Message-ID <mailman.1896.1312482269.1164.python-list@python.org> (permalink)

Show all headers | View raw


On 08/04/2011 07:43 AM, Billy Mays wrote:
> Hey c.l.p.,
>
> I wrote a little python script that finds the file that a python module
> came from.  Does anyone see anything wrong with this script?
>
> #!/usr/bin/python
>
> import sys
> if __name__ == '__main__':
>       if len(sys.argv)>  1:
>           try:
>               m = __import__(sys.argv[1])
>               sys.stdout.write(m.__file__ + '\n')

For a quick script in a controlled environment, not bad.  In a 
hostile environment, I'd be nervous about running arbitrary 
module code triggered by the import.  Even if non-malicious, some 
imports (like PyCrypto) may have some initialization lag which 
would be nice to avoid.  I think I'd make use of imp.find_module 
to write it something like this (untested)

   from sys import argv, stderr
   import imp
   type_map = {
     imp.PY_SOURCE: "Source file",
     imp.PY_COMPILED: "Compiled code object",
     imp.C_EXTENSION: "Dynamically loadabld shared library",
     imp.PKG_DIRECTORY: "Package directory",
     imp.C_BUILTIN: "Built-in",
     imp.PY_FROZEN: "Frozen module",
     }
   if __name__ == '__main__':
     if len(argv) > 1:
       for modname in argv[1:]:
         try:
           fp, pth, desc = imp.find_module(modname)
           (suffix, mode, type_) = desc
           if fp is not None: fp.close()
           print("%s\t[%s]" % (
             pth,
             type_map.get(type_, "UNKNOWN")
             ))
         except ImportError:
           stderr.write("No such module '%s'\n" % modname)
     else:
       stderr.write("Usage: pywhich <module> [<module>...]\n")

I don't know a good way to tap into other import hooks (such as 
the zipfile import) to augment that type_map dictionary.

-tkc


Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

PyWhich Billy Mays <81282ed9a88799d21e77957df2d84bd6514d9af6@myhashismyemail.com> - 2011-08-04 08:43 -0400
  Re: PyWhich Chris Rebert <clp2@rebertia.com> - 2011-08-04 10:22 -0700
  Re: PyWhich Tim Chase <python.list@tim.thechases.com> - 2011-08-04 13:24 -0500
  Re: PyWhich Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-08-05 10:34 +1000
    Re: PyWhich Tim Chase <python.list@tim.thechases.com> - 2011-08-04 20:04 -0500
      Re: PyWhich Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-08-05 23:51 +1000
        Re: PyWhich Tim Golden <mail@timgolden.me.uk> - 2011-08-05 15:03 +0100
        Re: PyWhich John Gordon <gordon@panix.com> - 2011-08-05 14:33 +0000
    Re: PyWhich Chris Angelico <rosuav@gmail.com> - 2011-08-05 03:03 +0100
      Re: PyWhich Billy Mays <81282ed9a88799d21e77957df2d84bd6514d9af6@myhashismyemail.com> - 2011-08-05 10:43 -0400
        Re: PyWhich Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2011-08-06 00:56 +1000
  Re: PyWhich Web Dreamer <webdreamer@nospam.fr> - 2011-08-05 16:34 +0200

csiph-web