How do I export the output of Python's built-in help() function

前端 未结 9 1043
时光取名叫无心
时光取名叫无心 2020-12-15 20:19

I\'ve got a python package which outputs considerable help text from: help(package)

I would like to export this help text to a file, in the format in w

相关标签:
9条回答
  • 2020-12-15 20:24

    In Windows, just open up a Windows Command Line window, go to the Lib subfolder of your Python installation, and type

    python pydoc.py moduleName.memberName > c:\myFolder\memberName.txt

    to put the documentation for the property or method memberName in moduleName into the file memberName.txt. If you want an object further down the hierarchy of the module, just put more dots. For example

    python pydoc.py wx.lib.agw.ultimatelistctrl > c:\myFolder\UltimateListCtrl.txt

    to put the documentation on the UltimateListCtrl control in the agw package in the wxPython package into UltimateListCtrl.txt.

    0 讨论(0)
  • 2020-12-15 20:25

    This is a bit hackish (and there's probably a better solution somewhere), but this works:

    import sys
    import pydoc
    
    def output_help_to_file(filepath, request):
        f = open(filepath, 'w')
        sys.stdout = f
        pydoc.help(request)
        f.close()
        sys.stdout = sys.__stdout__
        return
    

    And then...

    >>> output_help_to_file(r'test.txt', 're')
    
    0 讨论(0)
  • 2020-12-15 20:26

    If you do help(help) you'll see:

    Help on _Helper in module site object:
    
    class _Helper(__builtin__.object)
     |  Define the builtin 'help'.
     |  This is a wrapper around pydoc.help (with a twist).
    

    [rest snipped]

    So - you should be looking at the pydoc module - there's going to be a method or methods that return what help(something) does as a string...

    0 讨论(0)
  • 2020-12-15 20:29

    pydoc already provides the needed feature, a very well-designed feature that all question-answering systems should have. The pydoc.Helper.init has an output object, all output being sent there. If you use your own output object, you can do whatever you want. For example:

    class OUTPUT():

    def __init__(self):
        self.results = []
    def write(self,text):
        self.results += [text]
    def flush(self):
        pass
    def print_(self):
        for x in self.results: print(x)
    def return_(self):
        return self.results
    def clear_(self):
        self.results = []
    

    when passed as

    O = OUTPUT() # Necessarily to remember results, but see below.

    help = pydoc.Helper(O)

    will store all results in the OUTPUT instance. Of course, beginning with O = OUTPUT() is not the best idea (see below). render_doc is not the central output point; output is. I wanted OUTPUT so I could keep large outputs from disappearing from the screen using something like Mark Lutz' "More". A different OUTPUT would allow you to write to files.

    You could also add a "return" to the end of the class pydoc.Helper to return the information you want. Something like:

    if self.output_: return self.output_

    should work, or

    if self.output_: return self.output.return_()

    All of this is possible because pydoc is well-designed. It is hidden because the definition of help leaves out the input and output arguments.

    0 讨论(0)
  • 2020-12-15 20:31

    Selected answer didn't work for me, so I did a little more searching and found something that worked on Daniweb. Credit goes to vegaseat. https://www.daniweb.com/programming/software-development/threads/20774/starting-python/8#post1306519

    # simplified version of sending help() output to a file
    import sys
    # save present stdout
    out = sys.stdout
    fname = "help_print7.txt"
    # set stdout to file handle
    sys.stdout = open(fname, "w")
    # run your help code
    # its console output goes to the file now
    help("print")
    sys.stdout.close()
    # reset stdout
    sys.stdout = out
    
    0 讨论(0)
  • 2020-12-15 20:39

    To get a "clean" text output, just as the built-in help() would deliver, and suitable for exporting to a file or anything else, you can use the following:

    >>> import pydoc
    >>> pydoc.render_doc(len, renderer=pydoc.plaintext)
    'Python Library Documentation: built-in function len in module builtins\n\nlen(obj, /)\n    Return the number of items in a container.\n'
    
    0 讨论(0)
提交回复
热议问题