我在Windows机器上尝试的pre-revprop-change钩子脚本,但发现一个棘手的问题。
我提炼我的问题在以下情形:
我有C:\ csvn \数据\库\ TR1 \钩\的pre-revprop-change.bat与内容:
D:\svntest\testhook.py %*
exit %ERRORLEVEL%
testhook.py是:
import os, sys
if __name__ == '__main__':
# sys.stderr.write(sys.version+'\n') # this is OK, tried.
newtext = sys.stdin.read() # try to read new log message
sys.stderr.write('newtext is: %s\n'%newtext)
exit(2)
然而,做一个客户端时svn propset svn:log --revprop -r 2 "newtext"
,我得到了蟒蛇的错误:
Traceback (most recent call last):
File "D:\svntest\testhook.py", line 5, in <module>
newtext = sys.stdin.read() # try to read new log message
IOError: [Errno 9] Bad file descriptor
这是什么错误的原因是什么?
看来的pre-revprop-change.bat不通过STDIN处理对PY脚本。 是的,我验证的pre-revprop-change.bat可以(根据获取的指令从标准输入文本在批处理文件中读取标准输入流 )。
我还试图直接从命令行运行的pre-revprop-change.bat, sys.stdin.read()
是确定。
请您帮我出。
下面的屏幕截图:
ENV:
- Windows Server 2003中
- CollabNet的Subversion的边缘2.3(SVN 1.7.3和Apache 2.2.22)
- 安装Python从python.org 2.7.1 MSI
=============== [最新] ======================
我很抱歉地说:我应该写在蝙蝠
exit %ERRORLEVEL%
代替
exit /b %ERRORLEVEL%
对于有人谁与我试了一下,请修复它,然后再试一次。 该/b
似乎有的pre-revprop-change.bat永远退出以0 TIP:如果没有/b
,直接从一个cmd窗口运行.bat将导致cmd窗口关闭,所以我们最好有尝试cmd /c "pre-revprop-change.bat some param"
快捷方式下面重现此问题
更重要的是,对于那些谁是仍然有兴趣,请
- 下载这个文件包http://down.nlscan.com/misc/chjsvnpyhook.zip ,
- 他们解压到d:\,
- cd到d:\ svntest \ tr1_local,
- elog.bat运行(
svn propset svn:log --revprop -r 2 "newtext"
那么我的问题会得到再现。 (要求:svn.exe 1.7命令行(或CollabNet的TortoiseSVN的),和Python 2.7是否安装)
如果仍然无法重现错误。 我已经准备恰好表现出的问题VMware虚拟机。 下载VM在http://down.nlscan.com/misc/chj/winxp-svnhook-py-stdin-error.7z (链接预期是有效的,直到2013年9月)。 VMware播放3.0(免费),足以运行的虚拟机。
=============== [解决方法FOUND] ===================
通过@nmenezes提供了非常不错的解决方法是, c:\Python27\python.exe D:\svntest\testhook.py %*
的蝙蝠。