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

如何在Bash脚本中使用Python input()函数?解决EOFError报错问题

解决Bash脚本中嵌入Python时input()的EOFError问题

问题重现

你在Bash脚本里用here-doc嵌入Python代码,运行时input()抛出了EOFError,代码大概是这样:

#!/bin/bash
python3 <<END
print(input(">>> "))
END

问题原因

这是因为当你用here-doc(<<END)的时候,Python的标准输入被绑定到了here-doc的内容流上——当Python执行到input()时,here-doc已经读到END标记结束了,所以input()没有更多输入可读,直接碰到EOF就报错了。

解决方案

这里有几种靠谱的解决办法,看你实际需求选:

1. 让Python直接从终端读取输入(适合交互式场景)

把Python的标准输入重定向到/dev/tty,这是当前终端的设备文件,能让input()直接从终端获取用户输入,而不是从here-doc的流里读:

#!/bin/bash
python3 <<END < /dev/tty
print(input(">>> "))
END

2. 用Bash先读取输入再传递给Python(适合非交互式或参数传递)

如果不需要实时交互式输入,也可以先在Bash层面读取用户输入,再通过命令行参数或者环境变量传给Python,这样能避免标准输入冲突:

方法A:命令行参数传递

#!/bin/bash
read -p ">>> " user_input
python3 -c "print('$user_input')"

方法B:环境变量传递

#!/bin/bash
read -p ">>> " user_input
export USER_INPUT="$user_input"
python3 <<END
import os
print(os.environ['USER_INPUT'])
END

总结

如果是需要用户在终端输入的交互式场景,第一种重定向到/dev/tty的方法最直接;如果是要传递预先获取的参数,后面两种方法更稳妥,也能避免输入流冲突的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:49:33