windows - SVN-fejl, når adgang til via python

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har Python 3.1, Subversion 1.6.12 og PySVN installeret på Windows XP.


Hvis jeg åbner en Python terminal og gør


import subprocess
print subprocess.check\_output(['svnlook','youngest','D:/svn-repos/myrepo'])


Jeg får det forventede revisionsnummer.


Men hvis jeg tilføjer dette til Subversion s post-commit.bat, fejler det med fejlen 'Håndtaget er ugyldigt':


  File "C:Program FilesPython31libsubprocess.py", line 472, in check\_output
    process = Popen(*popenargs, stdout=PIPE, **kwargs)
  File "C:Program FilesPython31libsubprocess.py", line 651, in \_\_init\_\_
    errread, errwrite) = self.\_get\_handles(stdin, stdout, stderr)
  File "C:Program FilesPython31libsubprocess.py", line 750, in \_get\_handles
    p2cread = GetStdHandle(STD\_INPUT\_HANDLE)
WindowsError: [Error 6] The handle is invalid


Hvad kan forårsage dette, og hvordan vil jeg rette det? Jeg forsøgte at ændre Subversion-tjenesten for at køre som min bruger, og troede, at det var en slags tilladelsesproblem med standard-systemkontoen, men det havde ingen effekt.


Hvis jeg antager, at der ikke er nogen direkte løsning på dette, hvordan ville jeg arbejde rundt om dette? Jeg har brug for en eller anden måde at hente det yngste revisionsnummer fra et SVN-depot uden at have en lokal arbejdskopi. Jeg har gravet igennem PySVNs Programmerings reference , men jeg kan ikke finde det tilsvarende kald til 'svnlook youngest'. [10]


Rediger: Jeg ringer scriptet fra post-commit.bat som:


@ECHO OFF
"C:Program FilesPython31python.exe" "D:svn-reposmyrepohooksmyscript.py"

Bedste reference


Jeg endte med at bruge en anden SVN-binding, svn-python, og det fungerede. Jeg kan kun gætte, at der var noget uoverensstemmelse mellem Windows-binære filer til versionen af ​​subversion og PySVN.

Andre referencer 1


Jeg tror, ​​at du ikke behøver at bruge underprocessen ( bare for dette ), du ser, at du bare kan bruge:


import os

stdout = os.popen('svnlook youngest D:/svn-repos/myrepo')

print stdout.read()


Occam s razor:) [11]


Fordi som jeg ser det herfra .bat, er filerne gamle ting og delprocesser, der beskæftiger sig med meget omdirigering, behandling, jeg tror ikke, det vil fungere, men måske har jeg fejl, måske vil jeg bare finde du er en undskyldning, men godt ...


Forresten, i python scriptet gør du en print og du har @ECHO OFF i din .bat så jeg tror ikke det vil fungere måske du kan pakke din kommando med noget som dette :


@ECHO ON
"C:Program FilesPython31python.exe" "D:svn-reposmyrepohooksmyscript.py"
@ECHO OFF


godt held og lykke :)