Установите ширину обертки для документов Python в терминале

StackOverflow https://stackoverflow.com/questions/19823513

  •  04-07-2022
  •  | 
  •  

Вопрос

Я использую оболочку Python в терминале TTY, и чрезвычайно раздражает, что вся документация завершается такой узкой шириной. Мой экран 1600 на 900 пикселей, с моим терминалом со счетом 200 на 56 символов, но документация Python от оболочки настаивает на том, чтобы обернуть гораздо более узкую ширину. (Линии, которые я ввожу в подсказке, не ограничены; это позволяет им запустить полную ширину экрана.)

Я знаю, что Максимальная длина линии PEP-8 Указывает, что DocStrings ограничивается 72 символами на строку, но есть ли способ заставить его использовать весь терминал в любом случае? Я знаю, что Javadoc удаляет дополнительную линию, упавшую из комментариев Javadoc; Я после чего -то, что работает в некотором роде.

Самая большая проблема с этим - список модулей: вместо использования всей ширины моего экрана, когда он перечисляет все имена модулей, он использует только узкую ширину обертывания, отображая модули только в четырех столбцах, и поэтому он не может на самом деле не может Установите весь список на моем экране (хотя он идеально подходит для других мониторов). Я не могу просто пробиться less Либо, как я делаю с негабаритным --help Текст в Bash.

Это было полезно?

Решение

== РЕДАКТИРОВАТЬ == Обновлено

Таким образом, проблема, с которой вы столкнетесь, заключается в том, что для справки на основе CLI ширина строки DOC действительно ограничена только новичками в исходной документации. То есть, когда вы бегаете на помощь (будущее), это просто печатает строку документа и странит ее. Ничего особенного, форматирование не было сделано на лету. Вот почему, если вы переведете DOC в HTML, вы можете изменить ширину браузера, и он будет обернуться по -разному.

Единственный способ, которым я обнаружил, чтобы изменить это поведение, - это если вы фактически измените саму DocString.

Вот быстрый пример того, как справиться с обезжиренными ручками. По сути, в докторе

a = """
one
two

three
"""

Кодирует в

'\none\ntwo\n\nthree\n'

Если вы хотели автоматически, вам просто нужно заменить n [^ n] (любой символ Newline +, который не является новой линией) с захваченным символом.

re.sub('\n([^\n])', ' \g<1>', a)

тогда становится

' one two\n three\n'

Это супер хакерский способ ведения дел, но единственный способ, которым я могу придумать переформатирование вещей, чтобы они упаковали.

Лучшим примером будет:

#!/usr/bin/python

import pydoc
import re

t = re.sub('\n([^\n])', ' \g<1>', pydoc.__doc__)
pydoc.__doc__ = t
help(pydoc)

== РЕДАКТИРОВАТЬ ==

Это может или не может соответствовать вашим потребностям, но у меня была похожая конфессия, которую я решил немного по -другому. Я написал обертку «помощь», которая загружает документы Stdlib в браузере на заднем плане. Это может или не может помочь вам - одна хорошая вещь заключается в том, что вывод HTML Pydoc материал позволяет увеличивать ширину переменной в параграфах.

Вы можете взять прикрепленный сценарий, импортировать его с сайта.py, а затем, когда вы запускаете help () из CLI на любых вещах Stdlib, он автоматически откроет соответствующую веб -страницу. Это ничего не делает для ваших собственных местных вещей (я не думаю, это было некоторое время), но это может быть изменено, чтобы сделать это.

Если ты хардкорный парень, извиняюсь. Но когда я столкнулся с аналогичным захватом в отношении вывода вещей, это то, что я изначально пробовал.

#!/usr/bin/python

import inspect
import os
import sys
import webbrowser
from pydoc import Helper

__all__ = ['MyHelper', 'old_help', 'help']


class MyHelper(Helper):

    def __init__(self):
        Helper.__init__(self)

    def getdocloc(self, object):
        global old_help
        """Return the location of module docs or None"""
        try:
            file = inspect.getabsfile(object)
        except TypeError:
            file = '(built-in)'

        docloc = os.environ.get("PYTHONDOCS", "http://docs.python.org/library")
        basedir = os.path.join(sys.exec_prefix, "lib", "python"+sys.version[0:3])
        BUILTINS_LIST = ( 'errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'signal', 'sys', 'thread', 'zipimport')
        if (isinstance(object, type(os)) and (object.__name__ in BUILTINS_LIST or file.startswith(basedir)) and object.__name__ not in ('xml.etree', 'test.pydoc_mod')):
            if docloc.startswith("http://"):
                docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__)
            else:
                docloc = os.path.join(docloc, object.__name__ + ".html")
        else:
            docloc = None
        return docloc

    def __repr__(self):
        global old_help
        if inspect.stack()[1][3] == '?':
            return self()
            return ''
        else:
            return '<HHhelp instance>'

    def help(self, *args):
        print args
        global old_help
        if isinstance(args[0], object):
            docloc = self.getdocloc(args[0])
            print '********',docloc,type(docloc)
            if isinstance(docloc, str):
                if docloc.find('http://') == 0:
                    webbrowser.open(docloc)
        else: 
            old_help(args)

global old_help, help
old_help = help
help = MyHelper()

Второе решение, которое я использую для получения симпатичных документов Python, - это использование Sphinx SPHINX-APIDOC автоматически генерировать документы API для модулей Python. Стандартный вывод Python Doc действительно ограничен (как вы испытываете).

Тем не менее, с учетом сказанного - держу пари, что ширина для документов каким -то образом настраивается, но потребует обезьянного исправления ... Я немного наклеиваю и посмотрю, что я могу найти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top