2017-10-20 6 views
1

これは以前に尋ねられました(例えば、abなど)が、IPythonコンソールでは動作しません。 私は単純に、同じ行に何度も何度も何度も何度も印刷したいと思います。 これは私のコードです:IPythonコンソールの同じ場所に印刷

import time 

try: 
    while True: 
     s = "I want this always on the same line. "   
     print(s, end="\r", flush=True)   
     time.sleep(0.5) 

except KeyboardInterrupt: 
    pass 

そして、ここでは、私はIPythonコンソールで得るものです:

Text does not print on the same line

私はコードがで働くのPython 3で、PCとスパイダーのアナコンダ分布を使用していますAnacondaターミナルですが、私はIPythonが必要なので、同様にいくつかの画像をプリントアウトする必要があります。私もend=""を使ってみたかったり、print()の文の後に(たとえこれがPython 2の場合でも)コンマをつけてみましたが、役に立たなかった。

+1

'print(" hello "、end =" \ r ")'はコンソール(端末)上で正常に動作します。 – ZdaR

+0

"hellohellohelhelhelhelhelhelhelhelhelhelhelhelhelhelhello" ... – Zep

+0

端末で実行しようとすると、 'python3 run.py' @Zep – ZdaR

答えて

1

その私はIPythonコンソールで編集する前にこれを書いたので、私は、これはそこか機能するソリューションであるかどうかわからないのですが、ここで:

代わりに印刷()コマンドを使用して、私は考え代わりにsys.stdoutを使用してみてください。

from sys import stdout 
from time import sleep 

jobLen = 100 
progressReport = 0 

while progressReport < jobLen: 
    progressReport += 1 
    stdout.write("\r[%s/%s]" % (progressReport, jobLen)) 
    stdout.flush() 
    sleep(0.1) 

stdout.write("\n") 
stdout.flush() 

スリープ機能を使用すると、progresReportが大きくなり見ることができるだけのようです:

は、これは私が私のスクリプトのいずれかを持っている「progressreport」です。 stdoutの "\ r"部分は、スクリプトをprevius文字列に "置き換える"ものです。 flush()はwrite()関数の後に追加されます。これは時にはいくつかの環境で出力を表示する必要があるためです。

もう一度その行に書きたくない場合は、 "\ r"を付けずに空の文字列を書くか、 "\ n"を書き込んで終了します。

+0

それは動作します!つまり、実際のコードでは動作しませんが、私の例では正常に動作します。私は残りの部分を把握しようとします。 – Zep

関連する問題