Odpowiedź @ Paul92 to dobra ogólna dyskusja, ale chciałbym zaoferować możliwe czyste (ish) rozwiązanie tego:
Biblioteka, ten kod musi być dostosowywany do dowolnego środowiska wykonawczego, więc nie można tak naprawdę poprosić STDIN
o jakiś kluczowy fragment danych. Po pierwsze, użytkownicy twojej biblioteki mogą nie mieć standardowego wejścia z wielu powodów. Zamiast tego możesz użyć jakiejś formy wzorca strategii , aby dostosować sposób odzyskiwania tokena.
W Pythonie prawdopodobnie najlepszą opcją jest przekazanie strategii pobierania tokena jako parametru funkcji. Coś w tym stylu:
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")
Pomyśl o tym w ten sposób. Wymagany token jest argumentem funkcji bibliotecznej. Ponieważ wartość tokena może nie być statycznie znana w witrynie wywołującej, nie można tak naprawdę prosić o wartość jako argument. Zamiast tego, osoba dzwoniąca musi zapewnić funkcję, która będzie odpowiedzialna za dostarczenie tokena po wywołaniu.
Cała odpowiedzialność za podanie dokładnej mechaniki tokena jest teraz uzewnętrzniona z funkcji biblioteki. Odbiorca funkcji jest teraz odpowiedzialny za pozyskiwanie tokena za pomocą wszelkich dostępnych środków w czasie wykonywania. Może zapytać STDIN, ale może również działać jako brama pocztowa, czekać na wiadomość w skrzynce odbiorczej, czytać ją, wyodrębniać token i całkowicie zautomatyzować proces. Może to być okno dialogowe GUI lub formularz internetowy. Coś naprawdę - wszystkie opcje są teraz w rękach konsumenta biblioteki.