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

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

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

Как я могу пойти по этому поводу?

12 ответов

Решение

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

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')

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

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

pydoc -w Rpi.GPIO

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

Старый вопрос, но более новое рекомендовало универсальное решение (для 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')

Чтобы получить "чистый" текстовый вывод, как при помощи встроенной help(), и подходящий для экспорта в файл или что-нибудь еще, вы можете использовать следующее:

>>> 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'

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

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).

[Остальные отрезаны]

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

Выбранный ответ не работал для меня, поэтому я немного больше искал и нашел что-то, что сработало на Daniweb. Кредит идет на vegaseat. https://www.daniweb.com/programming/software-development/threads/20774/starting-python/8

# 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

Самый чистый способ

Предполагая help(os)

Шаг 1 - В консоли Python

       import pydoc 
 pydoc.render_doc(os, renderer=pydoc.plaintext)` 
 
 #this will display a string containing help(os) output 

Шаг 2 - Скопируйте строку

Шаг 3 - на терминале

      echo "copied string" | tee somefile.txt 

Если вы хотите записать информацию о классе в текстовый файл. Следуйте инструкциям ниже

  1. Вставьте хук pdb где-нибудь в классе и запустите файл

    import pdb; pdb.set_trace()

  2. Выполните шаги с 1 по 3, указанные выше

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

модуль sys

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

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

В 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.

Используя командную строку, мы можем напрямую получить вывод и направить его куда угодно.

      python -m pydoc ./my_module_file.py

--./важно, он говорит pydoc смотреть на ваш локальный файл и не пытаться импортировать откуда-то еще.

Если вы работаете на Mac, вы можете передать вывод наpbcopyи вставьте его в инструмент документации по вашему выбору.

      python -m pydoc ./my_module_file.py | pbcopy

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 хорошо спроектирован. Это скрыто, потому что определение справки пропускает входные и выходные аргументы.

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

Другие вопросы по тегам