คำตอบโดย @ Paul92 เป็นการสนทนาทั่วไปที่ดี แต่ฉันต้องการเสนอวิธีแก้ปัญหาที่สะอาด (ish) ที่เป็นไปได้ต่อไปนี้:
ไลบรารีรหัสนี้จะต้องปรับให้เข้ากับสภาพแวดล้อมรันไทม์ใด ๆ ดังนั้นคุณจึงไม่สามารถขอSTDIN
ข้อมูลสำคัญบางอย่างได้ สำหรับผู้ใช้ไลบรารีของคุณอาจไม่สามารถใช้ 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 หรือแบบฟอร์มบนเว็บ อะไรจริง ๆ - ตัวเลือกทั้งหมดอยู่ในมือของผู้บริโภคห้องสมุด