У меня установлен Windows Python 3.1, Subversion 1.6.12 и PySVN.
Если я открою терминал Python и сделаю
import subprocess
print subprocess.check_output(['svnlook','youngest','D:/svn-repos/myrepo'])
Я получил ожидаемый номер ревизии.
Однако, если я добавлю это в post-commit.bat Subversion, произойдет сбой с ошибкой «Неверный дескриптор»:
File "C:\Program Files\Python31\lib\subprocess.py", line 472, in check_output
process = Popen(*popenargs, stdout=PIPE, **kwargs)
File "C:\Program Files\Python31\lib\subprocess.py", line 651, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "C:\Program Files\Python31\lib\subprocess.py", line 750, in _get_handles
p2cread = GetStdHandle(STD_INPUT_HANDLE)
WindowsError: [Error 6] The handle is invalid
Что может быть причиной, и как бы я это исправить? Я попытался изменить службу Subversion, чтобы она работала как мой пользователь, думая, что это какая-то проблема с разрешениями для системной учетной записи по умолчанию, но это никак не отразилось.
Предполагая, что прямого решения для этого не существует, как бы мне обойти это? Мне нужен какой-то способ получить самый младший номер ревизии из репозитория SVN без локальной рабочей копии. Я перерыл Справочник программиста PySVN , но не могу найти эквивалентный вызов "svnlook youngest".
Редактировать: я вызываю скрипт из post-commit.bat как:
@ECHO OFF
"C:\Program Files\Python31\python.exe" "D:\svn-repos\myrepo\hooks\myscript.py"