2011-08-19 22 views
10

Existe una opción para imprimir el resultado de la ayuda ('myfun'). El comportamiento que estoy viendo es que el resultado se imprime en std.out y el script espera la entrada del usuario (es decir, escriba 'q' para continuar).python "help" function: printing docstrings

Debe haber una configuración para configurar esto solo para volcar docstrings.

Alternativamente, si pudiera simplemente volcar el docstring MÁS la línea "def f (args):" que estaría bien también.

La búsqueda de la "función de ayuda de python" es cómica. :) Tal vez me falta una buena página pydoc en algún lugar que lo explique todo?

Respuesta

13

para obtener exactamente la ayuda que ha impreso el help(str) en la variable strhelp:

import pydoc 
strhelp = pydoc.render_doc(str, "Help on %s") 

Por supuesto, a continuación, puede imprimir fácilmente sin paginación, etc.

+0

Otras respuestas son probablemente correctas, pero esto es exactamente lo que necesitaba. – mathtick

+0

@mathtick: ¡Ahora eso es lo que llamo concienzudo, aceptando una respuesta después de tanto tiempo! – kindall

+0

Ha ... Supongo que es un testimonio de la interfaz stackoverflow que me ayuda con mi vida laboral dispersa. Estaba leyendo detenidamente mi perfil, realmente presté atención a mi lista de preguntas y noté algunas que había olvidado aceptar. – mathtick

1
>>> x = 2 
>>> x.__doc__ 
'int(x[, base]) -> integer\n\nConvert a string or number to an integer, if possi 
ble. A floating point\nargument will be truncated towards zero (this does not i 
nclude a string\nrepresentation of a floating point number!) When converting a 
string, use\nthe optional base. It is an error to supply a base when converting 
a\nnon-string. If the argument is outside the integer range a long object\nwill 
be returned instead.' 

¿Eso es lo que necesitabas?

editar - puede print(x.__doc__) y con respecto a la firma de la función, puede compilarla utilizando el módulo inspect.

>>> inspect.formatargspec(inspect.getargspec(os.path.join)) 
'((a,), p, None, None)' 
>>> help(os.path.join) 
Help on function join in module ntpath: 

join(a, *p) 
    Join two or more pathname components, inserting "\" as needed 
3

Sólo

print obj.__doc__ 

o

myvar = obj.__doc__ 

La función de ayuda existe para ver la ayuda interactiva, se puede recuperar con bastante facilidad sin ella.

+0

Por alguna razón que aún no hago caso, esta generalmente es diferente del resultado de 'pydoc.render_doc (obj)' -Imagino especialmente en el caso de una función definida dentro de otra función, que establece su docstring estableciendo 'func .__ doc__ = ...'. – EOL

2

Ya ha visto referencia a la cadena de documentación, el __doc__ variable de la magia que posee el cuerpo de la ayuda:

def foo(a,b,c): 
    ''' DOES NOTHING!!!! ''' 
    pass 

print foo.__doc__ # DOES NOTHING!!!! 

para obtener el nombre de una función, sólo tiene que utilizar __name__:

def foo(a,b,c): pass 

print foo.__name__ # foo 

la manera de conseguir la firma de una función que no se construye en la que puede utilizar la propiedad func_code y de que se puede leer sus co_varnames:

def foo(a,b,c): pass 
print foo.func_code.co_varnames # ('a', 'b', 'c') 

No he encontrado cómo hacer lo mismo para las funciones integradas.