2016-11-02 3 views
0

Im пытается создать способ уловить ошибки в моем сценарии импорта базы данных, так как требуется очень много времени для запуска.Использование подпроцесса на уже запущенном скрипте для контроля кода возврата

я пытался до того, чтобы следить за сообщаться() перед моей Docker ехес команды, но до недавнего времени я узнал, что сценарий в вопросе «import.pl» выполняются за пределами грузчика, и я могу контролировать его с

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"]) 

Я возвращаю Идентификатор сценария вот в вопросе.

Вопрос в том, как я могу использовать подпроцесс или другую библиотеку в python для мониторинга уже запущенного pid до тех пор, пока он не достигнет EOL и не завершится с кодом возврата.

ответ