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

Bash并行运行Python脚本时报stdin is not a tty错误如何解决

错误根源

你提出的「同一Python文件被多次打开导致报错」的猜测不成立。报错本质是winpty的运行机制和后台进程的TTY绑定规则冲突:

  • winpty的核心作用是为Windows原生控制台程序模拟POSIX标准的TTY交互终端,运行时默认需要绑定当前会话的TTY资源
  • 你在命令末尾加&将进程放到后台执行时,Bash默认会解绑后台进程和当前TTY的关联,导致winpty无法获取可用的TTY,直接抛出stdin is not a tty错误
  • 串行运行时进程在前台执行,始终持有当前TTY的访问权限,所以可以正常运行,和你并行运行Python脚本本身没有关联
可行的解决方法
  • 方法一:为后台进程重定向输入流
    不需要修改原有调用逻辑,直接给命令追加空输入重定向即可,修改后的Bash脚本如下:
#!/bin/bash

for i in {1..5}; do
        winpty python test.py < /dev/null &
done
wait

末尾追加的wait命令可以保证主进程等待所有后台子进程执行完成后再退出。

  • 方法二:非交互脚本直接跳过winpty
    你当前的test.py属于无任何交互逻辑的纯计算脚本,Git Bash运行这类非交互Python脚本时本身不需要winpty做TTY模拟,直接去掉winpty即可正常并行运行:
#!/bin/bash

for i in {1..5}; do
        python test.py &
done
wait

如果直接运行python存在兼容问题,可以尝试调用Windows原生python.exe的绝对路径,比如/c/Users/你的用户名/AppData/Local/Programs/Python/Python3xx/python.exe。

  • 方法三:使用并行工具管理进程
    如果需要更可控的并行逻辑(比如控制同时运行的进程数、统一收集输出),可以使用Git Bash自带的parallel工具:
parallel -N0 winpty python test.py < /dev/null ::: {1..100}

这条命令可以直接并行运行100次脚本,默认会用CPU核心数作为同时运行的最大进程数,避免进程过多导致系统卡顿。


内容的提问来源于stack exchange,提问作者Jürg W. Spaak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:01