La risposta di @ Paul92 è una buona discussione generale, ma vorrei offrire una possibile soluzione clean (ish) a questo:
Una libreria, questo codice deve essere adattabile a qualsiasi ambiente di runtime, quindi non puoi davvero chiedere STDIN
per alcuni bit cruciali di dati. Per uno, gli utenti della tua libreria potrebbero non avere lo stdin disponibile per una serie di motivi. Invece, potresti voler usare qualche forma di modello strategia per personalizzare il modo in cui il token deve essere recuperato.
In Python, probabilmente l'opzione migliore è passare la strategia di recupero dei token come parametro di funzione. Qualcosa del genere:
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")
Pensa in questo modo. Il token richiesto è un argomento della funzione di libreria. Poiché il valore del token potrebbe non essere statisticamente noto nel sito di chiamata, non è possibile chiedere realmente il valore come argomento. Invece, il chiamante deve fornire una funzione che sarà responsabile della fornitura del token quando chiamato.
Tutta la responsabilità di fornire la meccanica esatta del token è ora esternalizzata dalla funzione di libreria. Il consumatore della funzione è ora responsabile dell'acquisizione del token con qualsiasi mezzo disponibile in fase di runtime. Può chiedere a STDIN, ma potrebbe anche fungere da gateway di posta, attendere che il messaggio compaia nella casella di posta, leggerlo, estrarre il token e automatizzare completamente il processo. Potrebbe essere una finestra di dialogo della GUI o un modulo basato sul web. Qualcosa di veramente - tutte le opzioni sono ora nelle mani del consumatore della biblioteca.