Ответ @ Paul92 - это хорошее общее обсуждение, но я хотел бы предложить возможное чистое (ish) решение этого:
Будучи библиотекой, этот код должен быть адаптируем к любой среде выполнения, поэтому вы не можете запросить 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, но он также может выступать в качестве почтового шлюза, ждать, пока сообщение войдет в папку «Входящие», прочитать его, извлечь токен и полностью автоматизировать процесс. Это может быть графический интерфейс или веб-форма. Что-нибудь действительно - все варианты теперь находятся в руках потребителя библиотеки.