2013-05-15 21 views
17

Fondamentalmente voglio scrivere uno script python che faccia diverse cose e uno di loro sia eseguire un checkout su un repository usando subversion (SVN) e magari preformare un paio di comandi svn. Qual'è il miglior modo per farlo ? Questo verrà eseguito come script di crond.Come eseguire i comandi SVN da uno script Python?

+2

Avete dato un'occhiata al [Interfaccia di Python per Subversion] (http: // pysvn. tigris.org/docs/pysvn.html)? –

+0

Non ne avevo bisogno ma grazie per il suggerimento. –

risposta

18

Questo lavoro dovrebbe funzionare?

p = subprocess.Popen("svn info svn://xx.xx.xx.xx/project/trunk | grep \"Revision\" | awk '{print $2}'", stdout=subprocess.PIPE, shell=True) 
(output, err) = p.communicate() 
print "Revision is", output 
+1

Questa è la risposta che stavo cercando. Grazie –

+4

@Ricardo Se hai intenzione di utilizzare questa tecnica, penso che sarebbe più semplice se l'output è richiesto come XML. Qualcosa come "svn info --xml". In questo modo i risultati saranno più semplici da analizzare ed elaborare. –

+1

grazie per l'heads up di @EdwinDalorzo –

14

Prova pysvn

offre un ottimo accesso per quanto ho provato.

Il motivo per cui sto dicendo che per quanto ho provato è perché mi sono trasferito a Git .. ma se ricordo pysvn è (il solo e) il migliore libreria per svn.

+0

Grazie per questo! – Danijel

+0

In realtà, ci sono due moduli python per subversion: pysvn e svn (SWIG lib attorno alla subversione C lib): http://svnbook.red-bean.com/en/1.7/svn.developer.usingapi.html#svn.developer .usingapi.otherlangs A seconda di cosa si sta tentando di fare, molte persone usano pysvn. –

0

Date un'occhiata nel modulo python xonsh: http://xon.sh/tutorial.html

Può chiamare comandi di shell più tubazioni e reindirizzamento di output con stretto contatto per il codice nativo python (nidificato) senza bisogno di giocare con python comunicare bullshet e sfuggire ai personaggi in giro.

Esempi:

env | uniq | sort | grep PATH

COMMAND1 e>o < input.txt | COMMAND2 > output.txt e>> errors.txt

echo "my home is $HOME"

echo @(7+3)

Problemi correlati