在已运行的脚本上使用子进程来监视返回代码

时间:2016-11-02 16:46:10

标签: python

我试图创建一种方法来捕获数据库导入脚本上的错误,因为它需要很长时间才能运行。

我之前尝试过监视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,并以返回码终止。

1 个答案:

答案 0 :(得分:0)

如果您已经知道要等待的PID,可以使用psutilshttps://pythonhosted.org/psutil/#psutil.wait_procs