返回从subprocess调用的bash脚本的代码

我正在写一个脚本,将一堆数据导入到一个couchdb数据库,问题是每个db需要大约15分钟,所以我不看整个事情,因为我有平均20分贝导入。

脚本通过一系列项目循环,然后调用每个subprocess,以便在进入下一个之前运行导入。

我试图做的是通过失败的脚本捕获任何不正确加载的数据库。 我试图抓住这个时,返回码不是0,问题是我只能得到调用docker命令的subprocess的返回码,而不是如果脚本正确执行。

#!/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) 

所以本质上,我想深入一个返回码,得到subprocess正在调用的docker命令的返回码,而不是subprocess的返回码。

所以只是为了得到这个的返回码:

 docker exec -it docker_1 ./node_modules/.bin/babel-node --debug --presets es2015 app/exportToCouch 

请注意,当您运行:

 docker exec -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