Die Antwort von @ Paul92 ist eine gute allgemeine Diskussion, aber ich möchte eine mögliche saubere (ish) Lösung dafür anbieten :
Als Bibliothek muss dieser Code an jede Laufzeitumgebung anpassbar sein, sodass Sie nicht wirklich STDIN
nach wichtigen Daten fragen können. Zum einen haben Benutzer Ihrer Bibliothek aus einer Reihe von Gründen möglicherweise kein stdin verfügbar. Stattdessen möchten Sie möglicherweise eine Art Strategiemuster verwenden , um anzupassen, wie das Token abgerufen werden soll.
In Python ist es wahrscheinlich die beste Option, die Token-Abrufstrategie als Funktionsparameter zu übergeben. Sowas in der Art:
def stdin_prompt():
return input("Enter code: ")
def my_library_function(arg1, arg2, ... argn, token_provider = stdin_prompt):
...
token = token_provider()
...
return stuff
# somewhere in the user code
stuff = my_library_function(a1, a2, ... an, lambda: "123456")
Stellen Sie es sich so vor. Das von Ihnen benötigte Token ist ein Argument für die Bibliotheksfunktion. Da der Wert für das Token an der Aufrufstelle möglicherweise nicht statisch bekannt ist, können Sie den Wert nicht wirklich als Argument anfordern. Stattdessen muss der Aufrufer eine Funktion bereitstellen, die für die Bereitstellung des Tokens beim Aufruf verantwortlich ist.
Die gesamte Verantwortung für die Bereitstellung der genauen Mechanik des Tokens wird jetzt aus der Bibliotheksfunktion ausgelagert. Der Verbraucher der Funktion ist nun dafür verantwortlich, das Token mit allen zur Laufzeit verfügbaren Mitteln zu erfassen. Es kann STDIN fragen, aber auch als Mail-Gateway fungieren, warten, bis die Nachricht im Posteingang eingeht, gelesen, das Token extrahiert und den Vorgang vollständig automatisiert. Es kann sich um ein GUI-Dialogfeld oder ein webbasiertes Formular handeln. Eigentlich alles - alle Optionen liegen jetzt in den Händen des Bibliotheksverbrauchers.