== editar == actualizado
Entonces, el problema con el que te encontrarás es que para la ayuda basada en CLI, el ancho de la cadena DOC realmente solo está limitado por las nuevas líneas en la documentación original. Es decir, cuando corres 'ayuda (futuro) ', simplemente imprime la cadena DOC y la paga. Nada lujoso, no hay formato hecho sobre la marcha. Es por eso que si representa el DOC a HTML, puede modificar el ancho del navegador y se envolverá de manera diferente.
La única forma en que encontré modificar este comportamiento es si realmente modifica el documento en sí.
Aquí hay un ejemplo rápido de cómo montar las cadenas de documentos. Esencialmente en una documentación, las nuevas líneas están codificadas hasta el final de la línea, de modo que
a = """
one
two
three
"""
Codifica
'\none\ntwo\n\nthree\n'
Si desea una línea 'envolver' automáticamente, solo necesita reemplazar n [^ n] (cualquier carácter Newline + que no sea una línea nueva) con el personaje capturado.
re.sub('\n([^\n])', ' \g<1>', a)
A entonces se convierte en
' one two\n three\n'
Esta es una forma súper hacky de hacer las cosas, pero la única forma en que puedo pensar para reformatear las cosas para que se envuelvan.
Un mejor ejemplo sería:
#!/usr/bin/python
import pydoc
import re
t = re.sub('\n([^\n])', ' \g<1>', pydoc.__doc__)
pydoc.__doc__ = t
help(pydoc)
== editar ==
Esto puede o no satisfacer sus necesidades, pero tenía una queja similar que resolví un poco diferente. Escribí un envoltorio de 'ayuda' que carga los documentos de stdlib en un navegador en segundo plano. Puede o no ayudarlo, una cosa buena es que la salida HTML de las cosas PYDOC permite anchos variables en los párrafos.
Puede tomar el script adjunto, importarlo de Site.py y luego, cuando ejecute Ayuda () desde la CLI en cualquier material de stdlib, abrirá la página web correspondiente automáticamente. Esto no hace nada por sus propias cosas locales (no creo, ha pasado un tiempo), pero podría modificarse para hacerlo.
Si eres Hardcore Cli Guy, disculpas. Pero cuando se enfrenta a una queja similar con respecto a la salida de cosas, esto es lo que inicialmente probé.
#!/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()
La segunda solución que uso para obtener bonitos documentos de Python es usar Sphinx's sphinx-apidoc para generar automáticamente documentos API para los módulos de Python. El material de salida estándar de Python Doc es realmente limitante (como estás experimentando).
Sin embargo, con esto dicho: apuesto a que el ancho de los documentos es configurable de alguna manera, pero requerirá parches de mono ... Me haré un poco y veré qué puedo encontrar.