summaryrefslogtreecommitdiffstats
path: root/Tools/scripts/pydoc
blob: a1dcbcc3075e090e715d5663180dabc64281c0db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/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)