Відповідь @ Paul92 - це хороша загальна дискусія, але я хотів би запропонувати можливе чисте рішення для цього:
Бібліотека, цей код повинен бути пристосований до будь-якого середовища виконання, тому ви не можете дійсно запитувати STDIN
якийсь важливий біт даних. З однієї причини, користувачі вашої бібліотеки можуть бути недоступними з кількох причин. Натомість ви можете скористатись якоюсь формою стратегії, щоб налаштувати спосіб отримання маркера.
У 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 або веб-форма. Все, що насправді - усі варіанти зараз у руках споживача бібліотеки.