我正在编写一个脚本,将一堆数据导入couchdb数据库,问题是每个db需要大约15分钟,因此我不会看到整个事情,因为我平均需要导入20 db。
脚本循环遍历一个项目数组,然后在每个项目上调用子进程,然后运行导入,然后继续下一步。
我试图通过失败的脚本捕获任何无法正确加载的数据库。 我试图在返回代码不为0时捕获这个,问题是我只能获取调用docker命令的子进程的返回代码,而不是脚本正确执行。
#!/usr/bin/python
import sys
import subprocess
cities = ["x","y", "z"];
uncompletedcities = []
for x in cities:
dockerscript = "docker exec -it docker_1 ./node_modules/.bin/babel-node --debug --presets es2015 app/exportToCouch %s %s" % (x,x)
p = subprocess.Popen(dockerscript, shell=True, stderr=subprocess.PIPE)
error = p.communicate()
if p.returncode != 0:
uncompletedcities.append(x)
while p.poll() == None:
print p.stderr.read()
print (uncompletedcities)
所以问题是,我收到了
的返回码p = subprocess.Popen(dockerscript, shell=True, stderr=subprocess.PIPE)
不是这里调用的脚本的返回码
dockerscript = "docker exec -it docker_1 ./node_modules/.bin/babel-node --debug --presets es2015 app/exportToCouch %s %s" % (x,x)
所以从本质上讲,我想更深入地了解返回代码,并获取子进程正在调用的docker命令的返回代码,而不是子进程的返回代码。
所以只需获取此代码的返回码:
docker exec -it docker_1 ./node_modules/.bin/babel-node --debug --presets es2015 app/exportToCouch
答案 0 :(得分:0)
请注意,当您运行时:
docker exec -it
你的-it
标志正在做一些与你正在尝试的事情相反的事情。您正在尝试打开交互式会话。这实际上正在执行命令。
您可以从命令中删除这两个,然后运行docker exec
:
dockerscript = "docker exec docker_1 ./node_modules/.bin/babel-node --debug --presets es2015 app/exportToCouch %s %s" % (x,x)
对于它的价值,我也可以考虑使用docker-py。如果您最终只使用几个命令行docker命令,它可以更灵活地运行docker命令。它还可以让您避免使用shell=true
。