用Python启动Docker容器会破坏终端设置

4
我正在使用subprocess.Popen启动一个docker容器,它可以正常运行,但当脚本返回时,我的终端设置会被搞乱。没有任何输出。我可以在终端中使用"tset"命令来解决这个问题,但我不想要这样。有没有人在使用docker时遇到过这个问题并解决了呢?
以下是我启动容器的方式:
        cmd = ['sudo',
               'docker',
               'run',
               '-t',
               '-i',
               'elucidbio/capdata:v2',
               'bash'
        ]
        p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

我曾试过用无限循环替换bash并使用nohup,但仍然发生了同样的事情。


3
你尝试过去掉 -t 并使用 stdin=DEVNULL 吗?"当客户端标准输出被重定向或管道化时,禁止指定 -t。" - jfs
你的意思是将stdin=DEVNULL传递给Popen还是docker run? - Larry Martell
3
Popen(.. stdin=subprocess.DEVNULL) 的翻译是“使用 subprocess.DEVNULL 参数来指定标准输入流不与终端关联”。 - jfs
subprocess.DEVNULL(你试过谷歌吗?)在Python 3中确实存在,并且在Python 2中很容易模拟它。如果你找到了解决方案,可以将其发布为自己的答案。 - jfs
我知道你使用的是Python 2.7;问题也被标记为这样。我本来希望你能自己在Google中找到如何使用subprocess.DEVNULL。而stdin=None则意味着不同的事情。 - jfs
显示剩余2条评论
1个回答

4

我通过删除-t并传入stdin=None来解决了这个问题。这是J.F. Sebastian在评论中建议的,他不想将其发布为答案,所以我这样做了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接