python实时强制git hook服务器端输出在同一行

时间:2017-05-23 07:48:12

标签: python git githooks

git hooks服务器端输出仅在换行符上传输。我想配置自定义任务并在同一行上打印实时输出。我怎样才能做到这一点?我尝试了sys.stdout.flush,但一旦完成它就会传输所有内容。如果我添加换行符,它确实可以实时工作。 我想要像

这样的东西
  

步骤A)开始......已完成

每个'。'在给定时间后附加。

我当前的代码如下所示,只有在方法完成后才会输出。

import sys, time, os


def print_realtime():
    sys.stdout.write('Started.')
    sys.stdout.flush()
    time.sleep(1)
    for i in range(1, 15):
        sys.stdout.write('.')
        sys.stdout.flush()
        time.sleep(0.5)

if __name__ == "__main__":
    print_realtime()

然而,如果我附加' \ n'它会实时工作。喜欢:

sys.stdout.write('.\n')

1 个答案:

答案 0 :(得分:1)

问题归结为Git本身在远程发送either a newline or carriage return之前不打印累积的const char ca[] = {'h','e','l','l','o','\0'}; const char* cp = ca; while(*cp){ std::cout<<*cp<<" "; ++cp; } 文本。

因此,如果我们将你的内部循环改为:

remote:

你会看到你想要的效果。

请注意,for i in range(1, 15): sys.stdout.write('.' * i + '\r') sys.stdout.flush() time.sleep(0.5) 会将打印位置移回到单词\r之后,因此我们必须重复到目前为止打印的内容(因此需要先打印一个remote: ,然后是两个. s,然后是三个,依此类推。)