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

使用指定conda环境的shebang运行Python脚本时input()触发EOFError

报错成因

conda 4.9及以上版本中,conda run命令默认会捕获子进程的标准输入(stdin)、标准输出(stdout)、标准错误(stderr),不会将终端的输入流透传给执行的Python进程。当代码运行到input()尝试读取输入时,输入流为空,就会抛出EOFError。
而先激活conda环境再运行Python脚本时,Python进程直接在当前交互shell中启动,可以正常读取终端的输入流,所以不会报错。

解决方案

方案1:直接使用目标环境Python解释器的绝对路径作为shebang(最稳定)

这是兼容性最好、无额外开销的方案,操作步骤:

  1. 执行以下命令查询TEST环境的Python解释器绝对路径:
conda run -n TEST which python
  1. 将查询到的路径直接写在shebang行即可,示例(替换为你自己查询到的路径):
#!/Users/你的用户名/miniconda3/envs/TEST/bin/python

def main(): # testing
    chromatogram_result = input()
    print(chromatogram_result)

if __name__ == "__main__":
    main()

后续直接运行./my_file.py就可以正常读取输入,不需要提前激活环境。

方案2:给conda run添加透传输入输出的参数

如果不想写死绝对路径,可以给conda run添加--no-capture-output参数(conda 4.10+支持),修改shebang为:

#!/usr/bin/env conda run -n TEST --no-capture-output python

注意:部分老旧Unix系统的shebang机制不支持传递多个参数,可能会失效,你当前使用的macOS 10.14环境支持该写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:12:02