Python subprocess执行WSL Docker attach命令失败的问题排查
解决Python调用WSL Docker Attach时的TTY错误
问题原因
docker attach需要交互式TTY环境才能正常工作,直接用subprocess.run调用时,默认不会为WSL分配TTY,导致报错'the input device is not a TTY'。之前尝试给docker attach加-t/-it无效,是因为这些参数应该传给WSL而非Docker。
解决方案
给WSL命令添加-t(或--tty)参数强制分配TTY,同时让subprocess继承当前终端的输入输出流,实现交互式连接:
import subprocess import sys # 启动容器(这条命令无需改动) subprocess.run(["wsl", "docker", "start", "dock1"], check=True) # 附加容器,关键配置WSL的TTY参数并继承终端IO subprocess.run( ["wsl", "-t", "docker", "attach", "dock1"], stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr, check=True )
补充说明
- 如果需要同时开启交互式和TTY,可将WSL参数改为
-it(即--interactive --tty的简写):subprocess.run( ["wsl", "-it", "docker", "attach", "dock1"], stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr, check=True ) check=True会在命令执行失败时抛出异常,方便排查问题;如果不需要可移除。
内容的提问来源于stack exchange,提问作者sm2002
相关产品推荐
相关产品推荐

