== Edit == Atualizada
Portanto, o problema é que você verá é que, para a CLI de ajuda, a doc string largura realmente é limitado apenas pela mudança de linha na documentação original.Isto é, quando você executar o 'ajuda(futuro)', apenas imprime o documento de seqüência de caracteres e páginas.Nada extravagante, sem formatação feito em tempo real.É por isso que se você processar o doc para HTML, você pode modificar o navegador de largura e vai moldar de forma diferente.
A única forma que eu encontrei para modificar este comportamento é, se você realmente modificar a docstring si.
Aqui está um exemplo rápido de como macaco-patch doc strings.Essencialmente, em uma docstring, as quebras de linha são codificados para o final da linha, tal que
a = """
one
two
three
"""
Codifica em
'\none\ntwo\n\nthree\n'
Se você queria 'wrap' linha automaticamente, você só precisa substituir [^ ] (qualquer newline + caractere que não seja um newline) com o personagem capturado.
re.sub('\n([^\n])', ' \g<1>', a)
um, em seguida, torna-se
' one two\n three\n'
Este é um super hacky maneira de fazer as coisas, mas a única maneira que eu posso pensar para reformatar as coisas de modo que eles tecem.
Um exemplo melhor seria:
#!/usr/bin/python
import pydoc
import re
t = re.sub('\n([^\n])', ' \g<1>', pydoc.__doc__)
pydoc.__doc__ = t
help(pydoc)
== Edit ==
Isso pode ou não pode atender às suas necessidades, mas eu tinha um semelhante queixa que eu resolvi de maneira um pouco diferente.Eu escrevi uma 'ajuda' wrapper que carrega stdlib documentos em um navegador em segundo plano.Ele pode ou não pode ajudar - uma coisa boa é que o HTML de saída de pydoc coisas permite larguras variáveis em parágrafos.
Você pode tirar o script anexado, importá-lo a partir de site.py e então, quando você executar a ajuda de() a partir da CLI em qualquer stdlib coisas, ele vai abrir a página da web automaticamente.Isso não faz nada para o seu próprio material local (eu não acho, tem sido um tempo), mas pode ser modificado para fazer isso.
Se você está hardcore CLI cara, desculpas.Mas, quando confrontado com a mesma queixa com relação à saída de material é isso que eu inicialmente tentou.
#!/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()
A segunda solução que eu uso para ficar bonita Python docs está usando o Sphinx esfinge-apidoc para gerar automaticamente API documentos para módulos Python.O padrão do Python, doc saída de material é muito limitante (como você está experimentando).
No entanto, com o que disse - eu aposto que a largura para docs é configurável, de alguma forma, mas vai exigir monkey patching...Vou fuçar um pouco e ver o que posso encontrar.