cpython/Tools/scripts/pydoc

79 lines
2.7 KiB
Plaintext
Raw Normal View History

#!/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)