【问题标题】:Python: Printing to standard out when running from a Gitolite trigger(hook)Python:从 Gitolite 触发器(挂钩)运行时打印到标准输出
【发布时间】:2014-01-20 05:03:28
【问题描述】:

所以在我的 Gitolite 服务器上,我设置了一个从触发器 GIT_POST 运行的 python 脚本。我想要它做的就是向客户端打印一些信息。

这是脚本:

#!/usr/bin/env python

import sys
import fileinput

def main():

    print "Trying to read input"

    for line in sys.argv:
        print line

    sys.exit(0)

if __name__ == '__main__':
    print 'Script initalizing'
    main()

很简单,对吧?好吧,当我提交并推送到我的服务器时,我得到了这个:

Counting objects: 5, done.
Writing objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git-user:website
   fe07881..cfc7979  master -> master

其中不包含它应该输出的任何文本。我知道这个脚本会运行,因为如果将sys.ext(0) 更改为sys.exit(1),git 会认为推送失败。此外,如果我运行失败的代码,客户端会收到堆栈跟踪和所有内容。

我在 git 1.7.1 上运行 gitolite3 v3.5.3.1-1-gf8776f5,那么我在这里缺少什么?

【问题讨论】:

  • 你可以试试sys.stdout = sys.__stdout__
  • @ArgiriKotsaris 不起作用,但如果我将其设置为 sys.stdout = sys.__stderr__ 它会打印。

标签: python git io gitolite


【解决方案1】:

它应该可以工作,但是 git 1.7.1 太旧了(2010 年 4 月)。

如“Git hook: enable echoing commands”中所述:

在一些早期版本的 Git 和早期版本的 Smart HTTP 中存在一个已知问题,即未发送输出。更新您的 git 版本并尝试。

【讨论】:

  • 尝试更新,没有解决我的问题。我说的是 Gitolite 的触发器,而不是 Git 的钩子。
  • @ILikePizza555 gitolite 触发器由 git 挂钩调用(update 之一:github.com/sitaramc/gitolite/blob/master/src/lib/Gitolite/Hooks/…)。但实际上,更新钩子是一个 gitolite perl 脚本,它反过来调用声明的 VREFS,所以我会检查为什么在这种情况下不会返回 stdout。
猜你喜欢
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
相关资源
最近更新 更多