2017-05-23 9 views
0

git hooksサーバー側出力は、改行でのみ送信します。私はカスタムタスクを設定して、同じ行にリアルタイム出力を出力したい。それをどうすれば実現できますか?私はsys.stdout.flushを試しましたが、完了したらすべてを送信します。改行を追加すると、リアルタイムで動作します。 私が欲しい開始python git hookサーバー側出力をリアルタイムで同じ行に強制します。

ステップ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() 

私は追加LIKE「\ n」の場合しかし、それはリアルタイムで動作します。

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

Welcome to Stackoverflow。残念ながら、私は問題の性質を理解することはできません。 [最小限で完全であり、検証可能な例](https://stackoverflow.com/help/mcve)の提供方法については、SOのガイドをご覧ください。このガイドラインに従えば、役に立つ回答を得る可能性がますます高まります。 – MrLeeh

+0

こんにちは@MrLeeh質問を更新しました。今は明らかですか? –

+0

まだそれは[mcve]ではありません。 MCVEは、問題を示すためにGitフックとして設定できる完全なPythonプログラム*です。 (おそらく、すべてのProcessPoolExecutorとロギングコードを取り除いて、stdoutに書き込む関数を持っていなければなりません。問題が解決されない場合は、新しい手掛かりがあります) – torek

答えて

1

問題は、リモートのeither a newline or carriage returnを送信するまでのGit自体が蓄積remote:テキストを印刷しないという事実のためにダウンしています。

そこで、私たちは読むためにあなたの内側のループを変更する場合:

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

あなたが望む効果が表示されます。 \rは言葉だけremote:た後、私たちは、我々は(まず1 .、2 .秒、その後、3、などを印刷するので、必要性をこれまでに印刷したものを繰り返す必要がありますに戻って、印刷位置を移動させること

注意に)。

+0

これは完璧に動作します!どうもありがとうございます! –

関連する問題