2010-11-16 34 views
1

我在Windows XP上安裝了Python 3.1,Subversion 1.6.12和PySVN。通過Python訪問時出現SVN錯誤

如果我打開一個Python終端,做

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

我得到預期的版本號。

但是,如果我加入這Subversion的-commit.bat後,它失敗,出現錯誤「的句柄無效」:

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的Programmer's Reference挖掘,但我找不到「svnlook最年輕」的等效呼叫。

編輯:我打電話從-commit.bat後像腳本:

@ECHO OFF 
"C:\Program Files\Python31\python.exe" "D:\svn-repos\myrepo\hooks\myscript.py" 
+0

你怎麼從post-commit.bat啓動這個,向我們展示post-commit.bat ???,因爲你顯示__STD_INPUT_HANDLE__的錯誤是無法找到的標準輸入,所以我猜測.bat文件在這個問題上是有限的 – mouad 2010-11-16 22:52:41

+0

謝謝。請參閱我上面的編輯。 – Cerin 2010-11-16 23:04:45

回答

1

我結束了使用不同的SVN綁定,svn-python,並且工作。我只能猜測Subversion版本和PySVN的Windows二進制文件之間存在一些不匹配。

0

我覺得你不需要使用子(只爲這),你看你可以只使用:

import os 

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

print stdout.read() 

Occam's razor :)

,因爲正如我從這裏看到它.bat文件是舊的東西,和蘇bprocess處理了大量的重定向,處理我不認爲這會奏效,但也許我錯了,也許我只是想找到你一個藉口,但是...

順便說一下,在你做一個print的python腳本,你必須在你的.bat@ECHO OFF,所以我不認爲這會工作,也許你可以像這樣的東西換你的命令:

@ECHO ON 
"C:\Program Files\Python31\python.exe" "D:\svn-repos\myrepo\hooks\myscript.py" 
@ECHO OFF 

以及好運:)

+0

os.system()不會捕獲輸出,我需要這樣做,因爲腳本會使用它接收到的修訂號進行其他操作。我也嘗試了@ECHO,但那沒有任何效果。 – Cerin 2010-11-17 01:28:38

+0

@Chris S:現在看到我的編輯我使用os.popen()也許這可以工作:),即使os.popen()不推薦使用,但也許它可以解決子進程的問題。 – mouad 2010-11-18 22:14:24

相關問題