@ Paul92による答えは一般的な議論ですが、これに対して可能なクリーンな(ish)ソリューションを提供したいと思います。
ライブラリであるこのコードは、どのランタイム環境にも適応できる必要があるSTDIN
ため、重要なデータを要求することはできません。1つには、ライブラリのユーザーがさまざまな理由で標準入力を利用できないことがあります。代わりに、何らかの形式の戦略パターンを使用して、トークンの取得方法をカスタマイズできます。
Pythonでは、おそらく最適なオプションはトークン取得戦略を関数パラメーターとして渡すことです。そんな感じ:
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")
このように考えてください。必要なトークンは、ライブラリ関数の引数です。トークンの値は呼び出しサイトで静的に認識されない可能性があるため、引数として値を実際に要求することはできません。代わりに、呼び出し元は、呼び出されたときにトークンを提供する機能を提供する必要があります。
トークンの正確なメカニズムを提供する責任はすべて、ライブラリ関数から外部化されました。関数のコンシューマーは、実行時に利用可能なあらゆる手段でトークンを取得する責任を負います。STDINを要求する場合もありますが、メールゲートウェイとして機能し、メッセージが受信トレイに表示されるのを待ってから読み取り、トークンを抽出し、プロセスを完全に自動化できます。GUIダイアログまたはWebベースのフォームの場合があります。本当に何でも-すべてのオプションは現在、ライブラリの消費者の手にあります。