2009-08-13 5 views
5

Je veux récupérer la docstring dans mon application de ligne de commande, mais chaque fois que j'appelle la fonction intégrée help(), Python passe en mode interactif.Python Get Docstring sans passer en mode interactif

Comment puis-je obtenir la docstring d'un objet et pas avoir Python grab focus?

Répondre

7

Tout docstring est disponible sur le .__doc__ propriété:

>>> print str.__doc__ 

En python 3, vous aurez besoin entre parenthèses pour l'impression:

>>> print(str.__doc__) 
3

Vous pouvez utiliser dir( {insérer le nom de la classe ici} ) pour obtenir le contenu d'une classe et ensuite itérer dessus, en cherchant des méthodes ou d'autres choses. Cet exemple semble dans une classe Task pour les méthodes commençant par le nom cmd et obtient leur docstring:

command_help = dict() 

for key in dir(Task): 
    if key.startswith('cmd'): 
     command_help[ key ] = getattr(Task, key).__doc__ 
1

.__doc__ est le meilleur choix. Cependant, vous pouvez également utiliser inspect.getdoc pour obtenir docstring. Un avantage de l'utilisation de ceci est qu'il supprime l'indentation des docstrings qui sont indentées pour s'aligner avec des blocs de code.

Exemple:

In [21]: def foo(): 
    ....:  """ 
    ....:  This is the most useful docstring. 
    ....:  """ 
    ....:  pass 
    ....: 

In [22]: from inspect import getdoc 

In [23]: print(getdoc(foo)) 
This is the most useful docstring. 

In [24]: print(getdoc(str)) 
str(object='') -> string 

Return a nice string representation of the object. 
If the argument is a string, the return value is the same object.