| #!/usr/bin/env python |
| |
| # -------------------------------------------------- command-line interface |
| |
| import sys, os, pydoc |
| from string import lower |
| |
| if __name__ == '__main__': |
| import getopt |
| class BadUsage: pass |
| |
| try: |
| opts, args = getopt.getopt(sys.argv[1:], 'k:p:w') |
| writing = 0 |
| |
| for opt, val in opts: |
| if opt == '-k': |
| pydoc.apropos(lower(val)) |
| break |
| if opt == '-p': |
| try: |
| port = int(val) |
| except ValueError: |
| raise BadUsage |
| def ready(port=port): |
| print 'server ready at http://127.0.0.1:%d/' % port |
| pydoc.serve(('127.0.0.1', port), ready) |
| break |
| if opt == '-w': |
| if not args: raise BadUsage |
| writing = 1 |
| else: |
| if args: |
| for arg in args: |
| try: |
| if os.path.isfile(arg): |
| arg = pydoc.importfile(arg) |
| if writing: |
| if os.path.isdir(arg): pydoc.writedocs(arg) |
| else: pydoc.writedoc(arg) |
| else: pydoc.man(arg) |
| except pydoc.DocImportError, value: |
| print 'problem in %s - %s' % ( |
| value.filename, value.args) |
| else: |
| if sys.platform in ['mac', 'win', 'win32', 'nt']: |
| # GUI platforms with threading |
| import threading |
| ready = threading.Event() |
| address = ('127.0.0.1', 12346) |
| threading.Thread( |
| target=pydoc.serve, args=(address, ready.set)).start() |
| ready.wait() |
| import webbrowser |
| webbrowser.open('http://127.0.0.1:12346/') |
| else: |
| raise BadUsage |
| |
| except (getopt.error, BadUsage): |
| print """%s <name> ... |
| Show documentation on something. |
| <name> may be the name of a Python function, module, or package, |
| or a dotted reference to a class or function within a module or |
| module in a package, or the filename of a Python module to import. |
| |
| %s -k <keyword> |
| Search for a keyword in the synopsis lines of all modules. |
| |
| %s -p <port> |
| Start an HTTP server on the given port on the local machine. |
| |
| %s -w <module> ... |
| Write out the HTML documentation for a module to a file. |
| |
| %s -w <moduledir> |
| Write out the HTML documentation for all modules in the tree |
| under a given directory to files in the current directory. |
| """ % ((sys.argv[0],) * 5) |