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

调用Python2.6读取输入时遇EOFError,请求技术排查

问题分析与解决方案

让我们一步步拆解你的问题并修复:

核心错误原因

你遇到的EOFError: EOF when reading a line是因为here-document的输入占用了Python的标准输入:
当你用python2.6 <<"EOF"时,bash会把EOF之间的所有代码作为标准输入传递给Python进程。当Python执行到input()时,它的标准输入已经被here-document的内容耗尽了,所以直接读到了EOF,触发错误。

除此之外,你的脚本还有两个额外问题:

  1. Python代码里有拼写错误:ptint('a=%d ' % a)应该是print。
  2. Bash的变量a/b和Python的a/b完全独立——最后bash计算的c是初始值1+2=3,根本不是用户输入的数值。

修复后的完整脚本

下面是一个既能正常读取终端输入,又能把Python获取的数值传递给bash计算总和的版本:

# 捕获Python输出的两个数值
read -r py_a py_b <<< $(python2.6 -c '
try:
    a = int(raw_input("Enter num 1: "))
    b = int(raw_input("Enter num 2: "))
    print("a=%d " % a)
    print("b=%d " % b)
    # 打印数值给bash捕获
    print("%d %d" % (a, b))
except ValueError:
    print("Invalid input! Please enter integers only.")
    exit(1)
')

# 检查输入有效性并计算总和
if [[ -n "$py_a" && -n "$py_b" ]]; then
    c=$((py_a + py_b))
    echo "Sum of the two numbers: $c"
else
    echo "Error: Failed to retrieve valid numbers."
fi

关键改进点

  1. 替换here-document为-c参数:
    使用python2.6 -c '代码'让Python直接从终端读取输入,避免了here-document占用标准输入的问题。
  2. 替换input()为raw_input():
    在Python2.6中,input()会把用户输入当作Python代码执行,存在安全风险;raw_input()只会读取字符串,更安全,之后我们再手动转成整数。
  3. 添加异常处理:
    防止用户输入非整数导致脚本崩溃,给出友好提示。
  4. 变量跨环境传递:
    通过Python打印数值,bash用read捕获输出,实现Python和bash之间的变量传递。

备选方案(坚持使用here-document)

如果你一定要用here-document,可以强制Python从终端读取输入(指定< /dev/tty),但注意这种方式没法直接把Python的变量传给bash:

a=1
b=2
python2.6 <<"EOF" < /dev/tty
a=int(raw_input('Enter num 1: '))
b=int(raw_input('Enter num 2: '))
print('a=%d ' % a)
print('b=%d ' % b)
# 注意:这里的a/b和bash的a/b无关
EOF
# bash的c还是1+2=3,不是用户输入的数值
c=$((a + b))
echo "$c"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:17:10