Python: печать в стандартном режиме при запуске из триггера Gitolite (хука)

Итак, на моем сервере Gitolite у меня есть скрипт Python, настроенный на запуск из триггера GIT_POST. Все, что я хочу, это распечатать некоторую информацию клиенту.

Это сценарий:

#!/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 считает, что отправка не удалась. Кроме того, если я запускаю код, который дает сбой, клиент получает трассировку стека и все остальное.

Я использую gitolite3 v3.5.3.1-1-gf8776f5 на git 1.7.1, так что мне здесь не хватает?


person ILikePizza555    schedule 20.01.2014    source источник
comment
Вы можете попробовать что-то вроде sys.stdout = sys.__stdout__.   -  person Argiri Kotsaris    schedule 20.01.2014
comment
@ArgiriKotsaris, это не работает, но если я установлю значение sys.stdout = sys.__stderr__, оно будет напечатано.   -  person ILikePizza555    schedule 20.01.2014


Ответы (1)


Это должно работать, но git 1.7.1 слишком стар (апрель 2010 г.).

Как упоминалось в "Git hook: включить эхо-команды":

в некоторых более ранних версиях Git, а также в более ранней версии Smart HTTP была известная проблема, из-за которой выходные данные не отправлялись. Обновите версию git и попробуйте.

person VonC    schedule 20.01.2014
comment
Пробовал обновлять, не решил мою проблему. Я говорю о триггерах Gitolite, а не о крючках Git. - person ILikePizza555; 20.01.2014
comment
Однако триггеры gitolite @ILikePizza555 вызываются хуками git (тот update: github.com/sitaramc/gitolite/blob/master/src/lib/Gitolite/Hooks/). Но на самом деле этот хук обновления представляет собой сценарий gitolite perl, который, в свою очередь, вызывает объявленный VREFS, поэтому я проверю, почему в этом случае не будет возвращен стандартный вывод. - person VonC; 20.01.2014