You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用asciimatics播放动画后调用input()报错RuntimeError: input(): lost sys.stdin求解

解决asciimatics动画后input()报错RuntimeError: input(): lost sys.stdin的问题

问题根源

asciimatics的Screen.wrapper运行时会接管sys.stdin/sys.stdout用于终端动画渲染,尽管设计上wrapper退出时会自动恢复原输入输出流,但部分场景下可能出现恢复失败,导致后续调用input()时找不到有效标准输入,触发报错。

解决方法1:将输入逻辑整合到Screen上下文内

把后续输入操作放在Screen.wrapper管理的上下文里,避免资源未恢复的问题,修改代码如下:

def demo(screen):
    scenes = []
    scenes.append(PlasmaScene(screen))
    screen.play(scenes, stop_on_resize=True, repeat=False)
    
    # 动画结束后直接在Screen上下文内处理输入
    clear()
    LOGGED, USER = login_entry(None)

def main():
    Screen.wrapper(demo)

# 调用时直接执行main
if __name__ == "__main__":
    clear()
    main()

解决方法2:手动恢复标准输入流

如果必须在Screen.wrapper外部使用input(),可在动画结束后手动重新连接标准输入,适配不同操作系统:

import sys
import os

def animate_intro():
    Screen.wrapper(demo)
    # 动画结束后手动恢复stdin
    if sys.platform.startswith('win'):
        sys.stdin = open('CON', 'r')
    else:
        sys.stdin = open('/dev/tty', 'r')

# 原调用逻辑保持不变
clear()
animate_intro()
clear()
LOGGED, USER = login_entry(None)

内容的提问来源于stack exchange,提问作者etchris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:30:42