Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #10866
| 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) |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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