Frage

Ich verwende die Python -Schale in einem TTY -Terminal, und es ist äußerst irritierend, dass alle Dokumentation in einer so engen Breite umwickelt. Mein Bildschirm ist 1600 x 900 Pixel, mein Terminal bei 200 x 56 Zeichen, aber die Python -Dokumentation aus der Shell besteht darauf, in einer viel schmaleren Breite zu wickeln. (Zeilen, die ich an der Eingabeaufforderung eingreife, sind nicht begrenzt. Sie ermöglicht es ihnen, die Vollbildbreite auszuführen.)

Ich bin mir bewusst, dass PEP-8 Maximale Linienlänge Gibt an, dass Docstrings auf 72 Zeichen pro Zeile begrenzt ist, aber gibt es eine Möglichkeit, es zum gesamten Terminal zu verwenden? Ich weiß, dass Javadoc zusätzliche Zeilenwickeln aus Javadoc -Kommentaren entfernt. Ich bin nach etwas, was so etwas funktioniert.

Das größte Problem dabei ist die Modulliste: Anstatt die gesamte Breite meines Bildschirms zu verwenden, wenn sie alle Modulnamen auflistet, wird nur die schmale Wrap -Breite verwendet, wobei die Module nur in vier Spalten angezeigt werden, sodass sie nicht tatsächlich nicht tatsächlich nicht tatsächlich nicht Passen Sie die gesamte Liste auf meinen Bildschirm an (obwohl sie perfekt zu anderen Monitoren passt). Ich kann es nicht einfach durchlaufen less Wie ich auch übergroß --help Text in Bash.

War es hilfreich?

Lösung

== edit == aktualisiert

Das Problem, auf das Sie stoßen, ist also, dass für die CLI -basierte Hilfe die DOC -String -Breite in der Originaldokumentation wirklich nur durch die Newlines begrenzt ist. Das heißt, wenn Sie Hilfe betreiben (Zukunft) ', es druckt nur die DOC -Zeichenfolge aus und passt sie. Nichts Besonderes, keine Formatierung im laufenden Fliegen. Wenn Sie das DOC an HTML übertragen, können Sie die Browserbreite ändern und er wird unterschiedlich einwickeln.

Die einzige Möglichkeit, dieses Verhalten zu ändern, besteht darin, dass Sie den Dokument selbst ändern.

Hier finden Sie ein kurzes Beispiel für die Affenpatch-Saiten. Im Wesentlichen in einem Dokument sind die Newlines bis zum Ende der Linie fest codiert, so dass

a = """
one
two

three
"""

Kodiert in

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

Wenn Sie automatisch 'Wrap' -Zeile' gewünscht haben, müssen Sie nur n [^ n] (ein neues Zeichen + -Scharakter, das keine neue Linie ist) durch das erfasste Zeichen ersetzen.

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

a dann wird

' one two\n three\n'

Dies ist eine super hackige Art, Dinge zu tun, aber der einzige Weg, den ich vorstellen kann, um Dinge neu zu formatieren, damit sie sich wickeln.

Ein besseres Beispiel wäre:

#!/usr/bin/python

import pydoc
import re

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

== edit ==

Dies kann Ihren Bedürfnissen entsprechen oder nicht, aber ich hatte einen ähnlichen Kritikpunkt, den ich etwas anders gelöst habe. Ich habe einen "Hilfe" -Wrapper geschrieben, der Stdlib -Dokumente in einem Browser im Hintergrund lädt. Es kann Ihnen helfen oder auch nicht - eine schöne Sache ist, dass die HTML -Ausgabe von Pydoc -Dingen variable Breiten in Absätzen ermöglicht.

Sie können das beigefügte Skript nehmen, es von Site.py importieren. Wenn Sie dann Hilfe () aus der CLI auf jedem STDLIB -Zeug ausführen, öffnet es die entsprechende Webseite automatisch. Das tut nichts für Ihre eigenen lokalen Sachen (ich glaube nicht, es ist eine Weile her), könnte aber dafür geändert werden.

Wenn Sie Hardcore CLI Guy sind, entschuldigen Sie sich. Aber wenn ich mit einem ähnlichen Kritikpunkt in Bezug auf die Ausgabe von Sachen konfrontiert bin, habe ich zunächst versucht.

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

Die zweite Lösung, die ich verwendet, um hübsche Python -Dokumente zu erhalten Sphinx-apidoc So generieren Sie automatisch API -Dokumente für Python -Module. Das Standard -Python -Dokument -Ausgangsmaterial ist wirklich einschränkend (wie Sie erleben).

Nachdem dies gesagt wurde - ich wette, dass die Breite für Dokumente irgendwie konfigurierbar ist, aber Monkey Patching benötigt ... Ich werde ein bisschen herumstupsen und sehen, was ich finden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top