我试图创建一种方法来捕获数据库导入脚本上的错误,因为它需要很长时间才能运行。
我之前尝试过监视docker exec命令之前的communic(),但直到最近我才知道有问题的脚本" import.pl"在docker之外运行,我可以用
监视它ps aux | grep perl
所以这就是我现在所拥有的,
#!/usr/bin/python
import sys
import subprocess
cities = ["x","y", "z"];
uncompletedcities = []
for x in cities:
dockerscript = "docker exec -it docker_1 perl ./import.pl %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)
但我无法得到正确的输出。
使用
check_output(["pidof", "perl"])
我返回有问题的脚本的pid。
我的问题是,如何在python中使用子进程或其他库来监视已经运行的pid,直到它到达EOL,并以返回码终止。