Seite 1 von 1
externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 06:41
von ScribusP
Hallo,
mein Versuch mehr Python zu lernen war bisher etwas schnodderig. Deshalb würde ich jetzt gerne die ersten Schritte nochmal aufmerksam gehen. Hierzu möchte ich gerne von einem Script ausgehend die Ausgabe der help()-Funktion in eine Datei schreiben. Der Code sieht wie folgt aus:
Code: Alles auswählen
#!/usr/bin/env python3
from sys import stdout
import contextlib
with open('help.txt', 'w') as f:
with contextlib.redirect_stdout(f):
help()
with open('symbols.txt', 'w') as f:
with contextlib.redirect_stdout(f):
help(symbols)
with open('keywords.txt', 'w') as f:
with contextlib.redirect_stdout(f):
help(keywords)
with open('topics.txt', 'w') as f:
with contextlib.redirect_stdout(f):
help(topics)
Das Problem ist jetzt dass die Funktion help() eine Eingabe erwartet. Zumindest ist das meine Vermutung weil ich den Command-Prompt nicht zurück bekomme. Wie kann ich das machen?
P.
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 08:17
von noisefloor
Hallo,
korrekt ist, dass `help()`ohne Argument eine interaktive Session startet, wo du Hilfe zu Thema $FOO abrufen kannst -> ist also nicht wirklich für ein Skript geeignet. Die anderen drei `help(...)` Aufrufe gibt es gar nicht, weil es diese Hilfstehmen gar nicht gibt.
Generell halte ich den Ansatz von dir so oder so für falsch. Was `help($FOO)` ausgibt ist nicht zum Lernen gedacht, sondern zum Nachschalgen / als Gedächnisauffrischung, wenn man mal was vergessen hat. Die allermeisten Hilfstexte sind zu kompakt, um damit Lernen zu können. Zum Lernen solltest du das offizielle Tutorial auf docs.python.org durcharbeiten und dann, wenn du progammierst, die Doku des jeweiligen Moduls. Die sind normalerweise wesentlich ausführlicher geschrieben, inkl. Beispielen.
Gruß, noisefloor
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 08:33
von Sirius3
@ScribusP: help ist nur ein Wrapper für das pydoc-Modul. Dort kann man flexibler arbeiten:
Code: Alles auswählen
import pydoc
with open('help.txt', 'w') as f:
helper = pydoc.Helper(output=f)
helper.intro()
with open('symbols.txt', 'w') as f:
helper = pydoc.Helper(output=f)
helper.listsymbols()
Aber warum willst Du Dir die Hilfe aus Python heraus ausgeben lassen, statt die Documentation im Web zu benutzen?
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 09:45
von DeaD_EyE
Das ist doch viel cooler einen Webserver auf dem eigenen PC mit der Doku zu starten.
Stell dir vor, du bist in einem Safe eingeschlossen, hast keine Internetverbindung und brauchst Dokumentation.
Windows:
Linux:
Oder man generiert sich die Docs, die man hier findet:
https://docs.python.org/
Dazu den Quellcode herunterladen. Wenn man eine bestimmte Python-Version möchte, kann man die Tags auswählen und dann den Quellcode herunterladen.
Geht auch via git.
Jedenfalls können die Dokumente mit Sphinx generiert werden. Im Verzeichnis `cpython-x.x.x` ist das Verzeichnis `Doc`.
Dort hineinwechseln und dann `make` bzw. make.bat aufrufen. Die Abhängigkeiten zum Erstellen der Dokumentation werden heruntergeladen.
Dann noch mal `make html`
Die Ausgabe ist dann in Doc/build/
Viel Spaß beim Erstellen einer Offline-Dokumentation.
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 10:51
von ScribusP
Schade um die Zeit und Mühe aller Beteiligten.
Ich möchte nicht, dass mein Vorhaben bewertet und als falsch dargestellt wird.
Und ich bin nicht hier um cool zu werden.
Für den Fall, dass man ein Problem nicht lösen kann gibt es ja die Möglichkeit sich ohne etwas zu schreiben etwas anderem zu zuwenden.
P.
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 10:59
von noisefloor
Hallo,
Ich möchte nicht, dass mein Vorhaben bewertet und als falsch dargestellt wird.
Na ja, selbst die besten hier im Forum posten ab und an mal Code, der falsch / verbesserungswürdig ist. Und das wird dann auch gesagt. Wenn du das nicht willst oder damit umgehen kannst, dann solltest du für dich entscheiden, wie sinnvoll es ist, hier überhaupt nochmal eine Frage zu stellen. Weil: die Chancen, dass die Antwort(en) nicht deiner Erwartungshaltung entsprechen, sind schon ziemlich hoch.
Gruß, noisefloor
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 11:09
von ScribusP
Du verdrehst meine Aussage damit sie zu Deiner Kritik passt.
Mein Vorhaben ist nicht gleich mein Code. Der Code kann von mir aus sein was er will. Hier geht es um Ettiquette.
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 11:23
von noisefloor
Hallo,
ok. Dann sag' doch mal, wie du es gerne gesagt bekommen würdest, dass a) dein Code so nicht funktionieren kann und b) du selbst mit funktionierendem Code nicht dahin kommen würdest, wo du gerne hin willst.
Dann können die, die in Zukunft immer noch genug Motivation haben, dir helfen zu wollen, vielleicht Rücksicht auf deine persönlichen Empfindlichkeit bzgl. Ettiquette nehmen.
Gruß, noisefloor
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 11:26
von Sirius3
@ScribusP: wenn Dir eine Meinung nicht gefällt, dann ignorier sie doch einfach. Hier darf jeder seine Meinung schreiben und ein ›halte ich‹ drückt eine persönliche Meinung aus, und nicht eine generelle Herabwürdigung Deiner Idee.
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 13:20
von sparrow
@ScribusP: Ich denke, du siehst das falsch. Du bekommst in den ersten beiden Antworten auf deinen Beitrag nicht nur die Erklärung warum es nicht geht sondern zusätzlich auch die Information, wie es trotzdem funktionieren könnte. _Zusätzlich_ bekommst du aber einen extremen Mehrwert geliefert. Nämlich viel mehr als eine schnöde Antwort. Und dieser Mehrwert ist in meine Augen nicht Negatives sondern etwas Positives. Weil du aus deinem eigenen Suppenteller - den jeder von uns hat - heraus kommst und du von der Erfahrung anderer profitieren kannst. Ich denke, das ist eher etwas Positives als etwas Negatives - sonst wird die Weiterentwicklung schwer.
Re: externer Aufruf von help()
Verfasst: Freitag 21. August 2020, 13:31
von __blackjack__
@DeaD_EyE: Das was man unter
https://docs.python.org findet kann man sich in der Tat generieren. Aber da ist oben links auch ein Link
Download these documents wo man das schon fertig herunterladen kann. In verschiedenen Formaten: PDF, HTML, Text, und EPub.
Re: externer Aufruf von help()
Verfasst: Samstag 22. August 2020, 11:49
von DeaD_EyE
ScribusP hat geschrieben: Freitag 21. August 2020, 10:51
Und ich bin nicht hier um cool zu werden.
Nicht? Ich habe jetzt eine Stunde nach einer Möglichkeit mit pydoc gesucht und eine gefunden.
Habe ich gemacht, weil ich das selbst wissen wollte.
Die einfachste Variante außerhalb eines Python-Programs ist über das Modul pydoc:
Code: Alles auswählen
python -m pydoc
pydoc - the Python documentation tool
...
pydoc -w <name> ...
Write out the HTML documentation for a module to a file in the current
directory. If <name> contains a '/', it is treated as a filename; if
it names a directory, documentation is written for all the contents.
Der einfache Text-Modus als Ausgabe in Dateien wird aber nicht direkt unterstützt.
Und programmatisch:
Code: Alles auswählen
import pydoc
from pathlib import Path
TOPICS = tuple(pydoc.help.topics)
def write_topic(topic, root="."):
if topic.upper() not in TOPICS:
raise ValueError(f"Topic {topic} not found")
target = Path(root, topic).with_suffix(".txt")
with target.open("wt", encoding="utf8") as fd:
text, _ = pydoc.help._gettopic(topic)
fd.write(text)
if __name__ == "__main__":
help_dir = Path.home() / "python-help"
help_dir.mkdir(exist_ok=True)
for topic in TOPICS:
write_topic(topic, help_dir)
Also pydoc ist etwas komisch implementiert.