【发布时间】:2016-05-02 15:40:48
【问题描述】:
我正在从 subprocess.Popen 启动一个 docker 容器,它可以工作,但是当脚本返回时,我的 shell 的终端设置被搞砸了。没有任何回应。我可以在终端中使用tset 解决此问题,但我不想这样做。这里有没有人使用过 docker 并看到并解决了这个问题?
这是我启动容器的方式:
cmd = ['sudo',
'docker',
'run',
'-t',
'-i',
'elucidbio/capdata:v2',
'bash'
]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
我尝试用无限循环替换 bash 并使用 nohup,但同样的事情发生了。
【问题讨论】:
-
您是否尝试过删除
-t并传递stdin=DEVNULL? "Specifying-tis forbidden when the client standard output is redirected or piped" -
您的意思是将 stdin=DEVNULL 传递给 Popen 还是 docker run?
-
Popen(.. stdin=subprocess.DEVNULL)(这样终端就不会附加标准流) -
subprocess.DEVNULL不存在。我用stdin=None进行了尝试,然后删除-t就成功了。您应该将此作为答案,以便我对其进行投票。谢谢! -
subprocess.DEVNULL(你试过用谷歌搜索吗?)确实存在于 Python 3 和 it is easy to emulate it on Python 2 中。如果您找到了解决方案;您可以将其发布为您自己的答案。
标签: python python-2.7 docker subprocess