質問

私はTTY端末でPythonシェルを使用していますが、すべてのドキュメントがこのような狭い幅でラップすることは非常に刺激的です。私の画面は1600 x 900ピクセルで、ターミナルは200 x 56文字ですが、シェルのPythonドキュメントは、はるかに狭い幅で包むことを主張しています。 (プロンプトに入力する行は制限されていません。フル画面幅を実行できます。)

私はそれを知っています PEP-8最大線長 DocStringsは1行あたり72文字に制限されることを指定しますが、とにかく端末全体を使用する方法はありますか? JavadocがJavadocのコメントから余分なラインラップを削除することを知っています。私はそのように機能する何かを追いかけています。

これの最大の問題はモジュールリストです。すべてのモジュール名をリストするときに画面の幅全体を使用する代わりに、狭いラップ幅のみを使用して、4つの列のみにモジュールを表示するため、実際にはできません。私の画面にリスト全体を適合させます(ただし、他のモニターに完全に適合します)。私はそれをパイプすることはできません less どちらか、私が特大でやっているように --help バッシュのテキスト。

役に立ちましたか?

解決

== edit ==更新

したがって、あなたが遭遇する問題は、CLIベースのヘルプのために、ドキュメントの文字列幅は本当に元のドキュメントのNewLinesによってのみ制限されるということです。つまり、あなたが 'helpを実行したとき(将来) '、それはドキュメント文字列を印刷してページするだけです。派手なものも、その場で行われたフォーマットもありません。これが、ドキュメントをHTMLにレンダリングすれば、ブラウザの幅を変更できるため、ラップが異なる理由です。

この動作を変更する唯一の方法は、実際にドックストリング自体を変更する場合です。

ドキュメントの文字列をモンキーパッチする方法の簡単な例を次に示します。本質的にドックストリングで、ニューラインはラインの終わりまでハードコードされているため、

a = """
one
two

three
"""

にエンコードします

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

自動的に「ラップ」ラインが必要な場合は、 n [^ n](Newline + Charatureではない新しいライン +文字)をキャプチャされた文字を置き換えるだけです。

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ドキュメントをロードする「ヘルプ」ラッパーを書きました。それはあなたを助けるかもしれないし、そうでないかもしれません - 良いことの1つは、PydocのHTML出力がパラグラフのさまざまな幅を可能にすることです。

添付のスクリプトを使用して、site.pyからインポートしてから、stdlibのものでCLIからhelp()を実行すると、対応するWebページを自動的に開きます。これはあなた自身の地元のものに対して何もしません(私はそれはしばらく経っていないと思います)が、そうするために変更することができます。

あなたが筋金入りのCLIの男なら、お詫びします。しかし、物の出力に関して同様の不満に直面したとき、これは私が最初に試したことです。

#!/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ドキュメントを入手するために使用する2番目のソリューションは、Sphinxを使用することです Sphinx-Apidoc PythonモジュールのAPIドキュメントを自動的に生成します。標準のPython Doc Output Stuffは本当に制限されています(あなたが経験しているように)。

しかし、そうは言っても、ドキュメントの幅は何らかの形で構成可能であるが、サルのパッチをかける必要があると確信しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top