Как экспортировать вывод встроенной функции help() Python

У меня есть пакет python, который выводит значительный текст справки: help(package)

Я хотел бы экспортировать этот текст справки в файл, в формате, в котором он отображается help(package)

Как я могу это сделать?

Ответ 1

Это немного хакерски (и, возможно, где-то есть лучшее решение), но это работает:

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

А потом...

>>> output_help_to_file(r'test.txt', 're')

Ответ 2

pydoc.render_doc (вещь), чтобы получить текст справки о тексте в виде строки. Другие части pydoc, такие как pydoc.text и pydoc.html, могут помочь вам записать его в файл.

Использование модификатора -w в linux будет записывать вывод в html в текущем каталоге, например:

pydoc -w Rpi.GPIO

Помещает весь текст help(), который будет представлен из команды help(Rpi.GPIO) в хорошо отформатированный файл Rpi.GPIO.html, в текущем каталоге оболочки

Ответ 3

Если вы поможете (помощь), вы увидите:

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]

Итак, вы должны смотреть на модуль pydoc - там будет метод или методы, которые возвращают то, что help(something) делает в виде строки...

Ответ 4

Старый вопрос, но более новое рекомендованное общее решение (для Python 3. 4+) для записи вывода функций, которые print() в терминал, использует contextlib.redirect_stdout:

import contextlib

def write_help(func, out_file):
    with open(out_file, 'w') as f:
        with contextlib.redirect_stdout(f):
            help(func)

Пример использования:

write_help(int, 'test.txt')

Ответ 5

В Windows просто откройте окно командной строки Windows, перейдите в подпапку Lib вашей установки Python и введите

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

поместить документацию для свойства или метода memberName в moduleName в файл memberName.txt. Если вы хотите, чтобы объект находился ниже по иерархии модуля, просто добавьте больше точек. Например

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

поместить документацию по элементу управления UltimateListCtrl в пакете agw в пакете wxPython в UltimateListCtrl.txt.

Ответ 6

pydoc уже предоставляет необходимую функцию, очень хорошо продуманную функцию, которую должны иметь все системы ответов на вопросы. Пидок.Помогите. У init есть выходной объект, весь вывод отправляется туда. Если вы используете свой собственный выходной объект, вы можете делать все, что захотите. Например:

Выходной класс():

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 = []

когда прошло как

O = OUTPUT() # Обязательно запоминать результаты, но смотри ниже.

help = pydoc.Helper(O)

будет хранить все результаты в экземпляре OUTPUT. Конечно, начинать с O = OUTPUT() не самая лучшая идея (см. Ниже). render_doc не является центральной выходной точкой; выход есть. Я хотел OUTPUT, чтобы не допустить исчезновения больших выходных данных с экрана, используя что-то вроде Mark Lutz "More". Другой выход позволит вам записывать в файлы.

Вы также можете добавить "return" в конец класса pydoc.Helper, чтобы вернуть нужную информацию. Что-то вроде:

если self.output_: вернуть self.output_

должен работать, или

если self.output_: вернуть self.output.return_()

Все это возможно, потому что pydoc хорошо спроектирован. Это скрыто, потому что определение справки пропускает входные и выходные аргументы.

Ответ 7

Выбранный ответ не работал для меня, поэтому я немного больше искал и нашел что-то, что сработало на Daniweb. Кредит идет на 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

Ответ 8

Самый простой способ сделать это с помощью

модуль sys

он открывает поток данных между операционной системой и самим собой, получает данные из модуля справки и сохраняет их во внешнем файле.

file="str.txt";file1="list.txt"
out=sys.stdout
sys.stdout=open('str_document','w')
help(str)
sys.stdout.close