@ Paul92의 대답은 일반적인 일반적인 토론이지만 가능한 깨끗한 (ish) 솔루션을 제공하고 싶습니다 .
라이브러리 인이 코드는 모든 런타임 환경에 적용 할 수 있어야하므로 STDIN
중요한 데이터를 실제로 요청할 수는 없습니다 . 하나의 이유로, 라이브러리 사용자는 여러 가지 이유로 stdin을 사용할 수 없습니다. 대신 어떤 형태의 전략 패턴 을 사용 하여 토큰을 검색하는 방법을 사용자 정의 할 수 있습니다.
파이썬에서 아마도 가장 좋은 옵션은 토큰 가져 오기 전략을 함수 매개 변수로 전달하는 것입니다. 그런 것 :
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 대화 상자 또는 웹 기반 양식 일 수 있습니다. 실제로 무엇이든-모든 옵션은 이제 도서관 소비자가 사용합니다.