观察另一个进程(svn)

时间:2010-01-13 01:47:15

标签: python svn multiprocessing

我有一个python脚本从存储库列表中下载源代码,其中一些很大。

有时候,svn会在退房时挂起。有没有办法监视svn进程,所以我知道它是挂起还是没有?

2 个答案:

答案 0 :(得分:1)

您可以使用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()

答案 1 :(得分:0)

您可以继续轮询svn进程的stdout,并测试获取新文件的频率。如果您在x秒内没有收到新文件,请退回该过程。

在主脚本中使用子进程启动svn,并在等待进程完成时轮询stdout。