如何从python远程轮询Subversion历史记录/日志?

fen*_*iix 4 python svn

我需要找到分支的第一个提交者,而不必对所有整个分支进行检出。从命令行很容易做到:

svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname
Run Code Online (Sandbox Code Playgroud)

我需要从python脚本执行此操作,知道如何执行该操作?我检查了python颠覆绑定,但是即使看起来可以完成,但我还是不明白该怎么做。

任何帮助将不胜感激。

jro*_*jro 5

您可以只使用Python的subprocess模块:

from subprocess import Popen, PIPE
p = Popen('svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname',
          stdout=PIPE)
stdout, stderr = p.communicate()
Run Code Online (Sandbox Code Playgroud)

这样,您可以运行所需的任何SVN命令:只需检查stdout(也许是stderr)即可获得命令的结果。然后,您可以使用例如正则表达式来解析检索到的数据:

>>> s = Popen('svn log', shell=True, stdout=PIPE).communicate()[0]
>>> m = re.search('\r\nr(?P<rev>\d+)\s+\|\s+(?P<author>\w+)\s+\|\s+(?P<timestamp>.*?)\s|', s)
{'timestamp': '2011-10-10 10:45:01 +0000 (wed, okt 10 2011)',
 'rev': '1234',
 'author': 'someuser'
}
Run Code Online (Sandbox Code Playgroud)

  • 但是请注意,这些管道的缓冲区有些有限,在它们被填满的情况下,您需要显式读取/清空它们。该进程将按其仍在运行的方式运行,并且无法进行通信(它正在等待该进程结束)。Docs对此含糊其词。 (2认同)