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:
之后,因此我们必须重复到目前为止已经打印的内容(因此需要打印第一个 .
,然后是两个 .
,然后是三个,依此类推。
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:
之后,因此我们必须重复到目前为止已经打印的内容(因此需要打印第一个 .
,然后是两个 .
,然后是三个,依此类推。