2011-02-09 15 views
5

Używam reStructuredText do dokumentowania mojego kodu, aby uzyskać ładne strony HTML w trybie offline za pomocą epydoc.restructuredText, docstring i interpunkcja powłoki Pythona

Wyniki są znakomite. Jedyną wadą jest to, że gdy używam powłoki interaktywnej Python, funkcja help() nie parsuje metadanych reST w ciągach dokumentacji, a zamiast tego wyświetla całą treść taką, jaka jest.

Czy istnieje sposób, aby uzyskać pomoc(), aby wykonać pewne minimalne parsowanie docstrukcji?

Nie oczekuję renderowania kursywy ani hiperłączy, ale przynajmniej minimalnych porządków w celu zwiększenia czytelności.

+0

Myślę, że możesz napisać własną 'help()'. Nie jest to takie trudne, jak mogłoby się wydawać; wystarczy kod [inspect] (http://docs.python.org/library/inspect.html) i uruchomienie pager'a. Naprawdę nie byłoby trudno. – ulidtko

+0

Ułatwienie dostosowywania pomocy() (np. Poprzez udostępnienie większej liczby funkcji w module pydoc) spowodowałoby dobre żądanie funkcji na http://bugs.python.org – ncoghlan

+0

To pytanie może również być interesujące: http: // stackoverflow.com/questions/1192632/how-to-convert-restructuredtext-to-plain-text (Nie jest to dokładnie to samo, ale wystarczająco powiązane, aby było istotne) – ncoghlan

Odpowiedz

4

Funkcja help() zostanie dodany do nazw wbudowanego przez moduł site, które można dostosować poprzez stworzenie modułu sitecustomize.py gdzieś na swojej drodze (podobno to zwykle przechowywane w site-packages).

Następnie w pliku sitecustomize.py dodajesz wszystkie wymagane dostosowania.

Można by obsłużyć to kilka sposobów:

Jeśli chcesz zmienić (pozorny) zachowanie samej funkcji help(), zawinąć funkcję pomocy w dekoratora, coś jak:

def help_wrapper(func): 
    def inner(*args): 
     results = func(*args) 
     return your_cleanup_function_here(results) 
help = help_wrapper(help) 

Osobiście wolałbym nieco inne rozwiązanie, ponieważ nie wiadomo, co zrobi funkcja czyszczenia, aby pomóc w wyprowadzeniu, że nie jest napisane w RestructuredText.

Więc chciałbym po prostu utworzyć funkcję Wrapper:

def my_help(*args): 
    return your_cleanup_function_here(help(*args)) 

ten sposób można nadal mieć dostęp do oryginalnego help() funkcji, jeśli jest to potrzebne.

uwaga: należy zachować ostrożność podczas robienia rzeczy w sitecustomize.py, jak cokolwiek robisz tutaj prawdopodobnie wpłynie na całą sesję interpretera (i każdy sesji tłumacza), który może czasem prowadzić do niezamierzonych konsekwencji.

Powiązane problemy