python 强制 git 实时挂钩同一行上的服务器端输出

python Force git hook server side output on same line in realtime

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

的东西

Step A)Started......Completed

每个'.'在给定时间后追加。

我当前的代码如下所示,它仅在方法完成时输出。

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')

问题归结为 Git 本身不会打印累积的 remote: 文本,直到远程发送 either a newline or carriage return.

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

for i in range(1, 15):
    sys.stdout.write('.' * i + '\r')
    sys.stdout.flush()
    time.sleep(0.5)

你会看到你想要的效果。

注意 \r 将打印位置移回单词 remote: 之后,因此我们必须重复到目前为止已经打印的内容(因此需要打印第一个 .,然后是两个 .,然后是三个,依此类推。