문제

나는 TTY 터미널에서 파이썬 쉘을 사용하고 있으며, 모든 문서가 좁은 너비로 감싸는 것은 극도로 자극적입니다. 내 화면은 1600 x 900 픽셀이며 터미널은 200 x 56 문자이지만 쉘의 파이썬 문서는 훨씬 더 좁은 너비를 감싸는 것을 주장합니다. (프롬프트에서 입력 한 줄은 제한되지 않습니다. 전체 화면 너비를 실행할 수 있습니다.)

나는 그것을 알고있다 PEP-8 최대 선 길이 DocStrings가 라인 당 72 자로 제한되어 있다고 지정하지만 어쨌든 전체 터미널을 사용할 수있는 방법이 있습니까? Javadoc이 Javadoc 의견에서 추가 선 포장을 제거한다는 것을 알고 있습니다. 나는 그런 식으로 일하는 무언가를 따르고 있습니다.

이것의 가장 큰 문제는 모듈 목록입니다. 모든 모듈 이름을 나열 할 때 화면의 전체 너비를 사용하는 대신 좁은 랩 너비 만 사용하여 모듈을 4 개의 열에 만 표시하므로 실제로는 할 수 없습니다. 내 화면에 전체 목록을 맞추십시오 (다른 모니터에 완벽하게 맞지만). 나는 단지 그것을 통해 파이프 할 수 없습니다 less 내가 대형 크기로하는 것처럼 --help Bash의 텍스트.

도움이 되었습니까?

해결책

== edit == 업데이트되었습니다

따라서 문제는 CLI 기반 도움말의 경우 DOC 문자열 너비가 원본 문서의 Newlines에 의해서만 제한된다는 것입니다. 즉, '도움말'을 실행할 때 (미래) ', 그것은 단지 DOC 문자열을 인쇄하고 페이지를 페이지로 인쇄합니다. 공상은없고, 즉시 형식이 없습니다. 그렇기 때문에 문서를 HTML로 렌더링하는 경우 브라우저 너비를 수정할 수 있으며 다르게 랩됩니다.

이 동작을 수정하는 유일한 방법은 실제로 문서 자체를 수정하는 것입니다.

다음은 Monkey-Patch Doc 문자열을 만드는 방법에 대한 빠른 예입니다. 본질적으로 문서에서, 신약은 라인 끝까지 하드 코딩되어 있습니다.

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)

== edit ==

이것은 당신의 요구에 맞지 않을 수도 있지만, 나는 조금 다르게 해결하는 비슷한 그립을 가지고있었습니다. 나는 백그라운드의 브라우저에 stdlib 문서를로드하는 '도움말'래퍼를 썼습니다. 그것은 당신을 도울 수 있습니다. 좋은 점은 PYDOC 물건의 HTML 출력이 단락에서 가변 너비를 허용한다는 것입니다.

첨부 된 스크립트를 가져 와서 site.py에서 가져 오면 stdlib 물건에서 CLI에서 help ()를 실행하면 해당 웹 페이지를 자동으로 열 수 있습니다. 이것은 자신의 현지 물건을 위해 아무것도하지 않습니다 (나는 생각하지 않습니다. 오랜 시간이 지났습니다). 그러나 그렇게하도록 수정 될 수 있습니다.

당신이 하드 코어 클리 가이라면 사과드립니다. 그러나 물건의 출력과 관련하여 비슷한 그립에 직면했을 때 이것이 내가 처음 시도한 것입니다.

#!/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()

예쁜 파이썬 문서를 얻는 데 사용하는 두 번째 솔루션은 스핑크스의 사용입니다. 스핑크스-아파디도 파이썬 모듈에 대한 API 문서를 자동으로 생성합니다. 표준 Python Doc 출력 재료는 실제로 제한적입니다 (경험 한대로).

그러나, 그 말로 - 문서의 너비는 어떻게 든 구성 가능하지만 원숭이 패치가 필요할 것이라고 확신합니다 ... 조금 찌르고 내가 찾을 수있는 것을 볼 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top