У меня есть python script, чтобы загрузить исходный код из списка репозиториев, некоторые из них большие.
Иногда svn зависает в середине проверки. Есть ли способ наблюдать за процессом svn, и поэтому я знаю, что это зависает или нет?
Вы можете использовать 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()
Вы можете продолжать опрос stdout процесса svn и проверить, как часто вы получаете новые файлы. Если вы не получите новый файл за x секунд, откажитесь от процесса.
Запустите svn с помощью подпроцесса из вашего основного script и выполните опрос stdout в ожидании завершения процесса.