Shell管道传文件到Python stdin同时将输入内容显示到屏幕的实现问题
问题根因
管道/文件重定向输入和交互式终端输入的底层逻辑不同:交互式输入时tty会自动回显用户输入的内容,重定向场景下没有该回显逻辑,因此Input:提示后不会显示输入的文本内容;tee方案因为管道缓冲区机制,会先批量输出所有输入内容,再输出Python程序的打印内容,无法匹配你要的顺序。
纯Shell实现方案
使用系统自带的script工具模拟伪终端交互场景即可,无需安装额外依赖,也不需要修改Python代码:
script -q -c "python3 index.py" /dev/null < input.txt
参数说明
-q:启用静默模式,屏蔽script自身的启动、退出日志输出-c:指定要执行的目标命令/dev/null:丢弃script默认生成的会话日志文件,不需要持久化存储会话内容
执行上述命令后输出完全符合你预期的格式:
Input: Test1 Input -> Test1 Input: Test2 Input -> Test2 Input: Test3 Input -> Test3 Input: Traceback (most recent call last): File "index.py", line 2, in <module> x = input("Input: ") EOFError: EOF when reading a line
你可以自行在Python代码中添加EOF异常捕获逻辑消除报错,不会影响核心输出效果。
内容的提问来源于stack exchange,提问作者Wuttinan
相关产品推荐
相关产品推荐

