cli_interactive.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """命令行交互:议题、是否网络附录、运行前确认。"""
  2. from __future__ import annotations
  3. import sys
  4. def prompt_yes_no(question: str, *, default: bool = True) -> bool:
  5. """
  6. 询问 Y/n 或 y/N,回车采用 default。
  7. 在非 TTY 环境下直接返回 default,避免管道挂住。
  8. """
  9. if not sys.stdin.isatty():
  10. return default
  11. hint = " [Y/n] " if default else " [y/N] "
  12. try:
  13. raw = input(question + hint).strip().lower()
  14. except EOFError:
  15. return default
  16. if raw == "":
  17. return default
  18. if raw in ("y", "yes", "是", "好", "确认", "1"):
  19. return True
  20. if raw in ("n", "no", "否", "不", "0"):
  21. return False
  22. return default
  23. def prompt_topic(default_topic: str) -> str:
  24. if not sys.stdin.isatty():
  25. return default_topic
  26. try:
  27. raw = input(
  28. f"请输入历史议题(直接回车使用示例):\n> ",
  29. ).strip()
  30. except EOFError:
  31. return default_topic
  32. return raw if raw else default_topic