La réponse de @ Paul92 est une bonne discussion générale, mais je voudrais proposer une solution propre (ish) à cela:
Dans une bibliothèque, ce code doit être adaptable à tout environnement d'exécution. Vous ne pouvez donc pas vraiment demander STDIN
des données cruciales. D'une part, les utilisateurs de votre bibliothèque pourraient ne pas disposer de stdin pour un certain nombre de raisons. Au lieu de cela, vous souhaiterez peut-être utiliser une forme de modèle de stratégie pour personnaliser le mode de récupération du jeton.
En Python, la meilleure option est probablement de passer la stratégie d'extraction de jetons en tant que paramètre de fonction. Quelque chose comme ca:
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")
Pensez-y comme ça. Le jeton dont vous avez besoin est un argument de la fonction de bibliothèque. Étant donné que la valeur du jeton peut ne pas être connue de manière statique sur le site de l'appel, vous ne pouvez pas réellement demander la valeur en tant qu'argument. Au lieu de cela, l'appelant doit fournir une fonction qui sera chargée de fournir le jeton lors de l'appel.
Toute la responsabilité de fournir les mécanismes exacts du jeton est maintenant externalisée de la fonction de bibliothèque. Le consommateur de la fonction est maintenant responsable de l’acquisition du jeton par tout moyen disponible au moment de l’exécution. Il peut demander à STDIN, mais il peut également servir de passerelle de messagerie, attendre que le message apparaisse dans la boîte de réception, le lire, extraire le jeton et automatiser complètement le processus. Il peut s'agir d'une boîte de dialogue graphique ou d'un formulaire Web. N'importe quoi vraiment - toutes les options sont maintenant entre les mains du consommateur de la bibliothèque.