La risposta di @ Paul92 è una buona discussione generale, ma vorrei offrire una possibile soluzione pulita (ish) a questo:
In una libreria, questo codice deve essere adattabile a qualsiasi ambiente di runtime, quindi non puoi davvero chiedere STDIN
alcuni bit cruciali di dati. Per uno, gli utenti della tua libreria potrebbero non avere stdin disponibile per una serie di motivi. Invece potresti voler usare una qualche forma di modello di 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")
Pensala in questo modo. Il token richiesto è un argomento per la funzione di libreria. Poiché il valore per il token potrebbe non essere staticamente noto nel sito di chiamata, non è possibile richiedere il valore come argomento. Al contrario, il chiamante deve fornire una funzione che sarà responsabile di fornire il token quando viene 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 esecuzione. Potrebbe chiedere STDIN, ma potrebbe anche fungere da gateway di posta, attendere che il messaggio compaia nella posta in arrivo, leggerlo, estrarre il token e automatizzare completamente il processo. Potrebbe essere una finestra di dialogo della GUI o un modulo basato sul Web. Qualsiasi cosa in realtà - tutte le opzioni sono ora nelle mani del consumatore della biblioteca.