Следить за другим процессом (SVN) - PullRequest
1 голос
/ 13 января 2010

У меня есть скрипт python для загрузки исходного кода из списка репозиториев, некоторые из них большие.

Иногда svn зависает в середине проверки. Есть ли способ наблюдать за процессом SVN, и поэтому я знаю, что это зависание или нет?

Ответы [ 2 ]

1 голос
/ 13 января 2010

Вы можете использовать PySVN и зарегистрировать обратный вызов для каждого процесса "события". PySVN также может опрашивать "отменить" обратный вызов. Первый обратный вызов может запустить таймер, и, если время таймера истечет, вы можете сказать «отменить» обратный вызов для возврата False, тем самым отменяя извлечение.

#!/usr/bin/python

url = "svn://server/path/to/repo"
path = "/path/to/local/wc"

import pysvn
import threading

# Set to something reasonable
SVN_TIMEOUT = 1000

svn_timer = None
stop_svn = False

def timer_expired():
    # Too long since last SVN event, so do something sensible...
    print "SVN took too long!"
    global stop_svn
    stop_svn = True

def svn_cancel():
    return stop_svn

def notify( event_dict ):
    global svn_timer
    if svn_timer:
        svn_timer.cancel()
    svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
    svn_timer.start()

svn_client = pysvn.Client()
svn_client.callback_notify = notify
svn_client.callback_cancel = svn_cancel

svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()

revision = svn_client.checkout(url,path)

if svn_timer:
    svn_timer.cancel()
0 голосов
/ 13 января 2010

Вы можете продолжать опросить стандартный вывод процесса svn и проверить, как часто вы получаете новые файлы. Если вы не получите новый файл в течение x секунд, отмените процесс.

Запустите svn, используя подпроцесс из вашего основного скрипта, и опишите стандартный вывод, ожидая завершения процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...