У меня есть пакет python, который выводит значительный текст справки: help(package)
Я хотел бы экспортировать этот текст справки в файл, в формате, в котором он отображается help(package)
Как я могу это сделать?
У меня есть пакет python, который выводит значительный текст справки: help(package)
Я хотел бы экспортировать этот текст справки в файл, в формате, в котором он отображается help(package)
Как я могу это сделать?
Это немного хакерски (и, возможно, где-то есть лучшее решение), но это работает:
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, в текущем каталоге оболочки
Если вы поможете (помощь), вы увидите:
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)
делает в виде строки...
Старый вопрос, но более новое рекомендованное общее решение (для 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')
В 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.
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 хорошо спроектирован. Это скрыто, потому что определение справки пропускает входные и выходные аргументы.
Выбранный ответ не работал для меня, поэтому я немного больше искал и нашел что-то, что сработало на 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
Самый простой способ сделать это с помощью
модуль sys
он открывает поток данных между операционной системой и самим собой, получает данные из модуля справки и сохраняет их во внешнем файле.
file="str.txt";file1="list.txt"
out=sys.stdout
sys.stdout=open('str_document','w')
help(str)
sys.stdout.close