スクリプトを実行したいのですが、基本的には次のようなことがわかります。
Installing XXX... [DONE]
さて、現時点では、関数が成功した後にprintを使って行全体を印刷します。しかし、ここで最初に "Installing xxx ..."を印刷し、関数の実行後に "DONE"タグを追加するようにします。しかし同じ行に。
何か案は?
print
をインポートせずにこれを行うには、sys
ステートメントを使用できます。
def install_xxx():
print "Installing XXX... ",
install_xxx()
print "[DONE]"
print
行の末尾のコンマは、print
が新しい行を発行するのを防ぎます(出力の最後に余分なスペースがあることに注意してください)。
Python 3ソリューション
上記はPython 3では機能しないので、代わりにこれを実行できます(これもsys
をインポートせずに)。
def install_xxx():
print("Installing XXX... ", end="", flush=True)
install_xxx()
print("[DONE]")
Print関数はデフォルトで"\n"
になるend
パラメータを受け取ります。空の文字列に設定すると、行末に新しい行が発行されなくなります。
あなたは単にこれを使用することができます:
print 'something',
...
print ' else',
出力は次のようになります。
something else
import sys
でやり過ぎる必要はありません。末尾のコンマ記号に注意してください。
Python 3 +最後の改行を削除するprint("some string", end="");
。もっと読むhelp(print);
sys.stdout.write('Installing XXX... ')
とsys.stdout.write('Done')
を使用してください。このように、印刷機能を再作成したい場合は、"\n"
を使用して手動で新しい行を追加する必要があります。このためだけに呪いを使う必要はないかもしれないと思います。
コンソール出力の前の位置に戻るには、バックスペース '\ r'または( '\ x08')charを使用する必要があります。
Python 2+:
import time
import sys
def backspace(n):
sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
sys.stdout.write(s) # just print
sys.stdout.flush() # needed for flush when using \x08
backspace(len(s)) # back n chars
time.sleep(0.2) # sleep for 200ms
Python 3:
import time
def backline():
print('\r', end='') # use '\r' to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print(s, end='') # just print and flush
backline() # back to the beginning of line
time.sleep(0.2) # sleep for 200ms
このコードは1行で0%から100%までカウントします。最終的な値は次のようになります。
> python test.py
100%
この場合のフラッシュに関する追加情報はここにあります: 'end ='引数を含むpythonのprintステートメントは、whileループで異なる動作をするのはなぜですか?
新しい行に遭遇するまでそれらがすべて一時停止したので、答えのどれも私のために働きませんでした。私は簡単なヘルパーを書きました:
def print_no_newline(string):
import sys
sys.stdout.write(string)
sys.stdout.flush()
それをテストするには:
import time
print_no_newline('hello ')
# Simulate a long task
time.sleep(2)
print('world')
「こんにちは」は、最初に印刷し、スリープ前に画面にフラッシュします。その後は標準印刷を使用できます。
sys.stdout.write
は改行なしで印刷されます
import sys
sys.stdout.write("installing xxx")
sys.stdout.write(".")
http://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
この簡単な例では、同じ行に1から10を印刷します。
for i in range(1,11):
print (i, end=" ")
Printはオプションのend引数を持ち、それが最後に出力されたものです。デフォルトは改行ですが、空文字列に変更することができます。例:print( "hello world!"、end = "")
print(‘\r’+’something to be override’,end=‘’)
これは、何かを印刷して同じ行で終わるよりも、カーソルを先頭に戻すことを意味します。ループしている場合は、同じ場所で印刷を開始します。
前の行を(継続的に追加するのではなく)上書きしたい場合は、printステートメントの最後に\r
とprint(),
を組み合わせることができます。例えば、
from time import sleep
for i in xrange(0, 10):
print("\r{0}".format(i)),
sleep(.5)
print("...DONE!")
コンソールの古い番号を置き換えて、0から9までカウントします。 "...DONE!"
は、最後のカウンター9と同じ行に表示されます。
OPの場合、コンソールはインストールの進捗率を「プログレスバー」として表示します。ここで開始文字と終了文字の位置を定義し、その間のマーカーを更新できます。
print("Installing |XXXXXX | 30%"),
ここでは、@ Vadim-Zin4ukによって3.0バージョンから派生した2.7互換バージョン:
Python 2
import time
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print '{0}\r'.format(s), # just print and flush
time.sleep(0.2)
それに関しては、提供された3.0解決策は少し肥大しているように見えます。たとえば、バックスペースメソッドは整数引数を使用しないため、おそらく完全になくすことができます。
Python 3
import time
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print('{0}\r'.format(s), end='') # just print and flush
time.sleep(0.2) # sleep for 200ms
どちらもテスト済みで動作しています。
これは非常に古いスレッドですが、これは非常に徹底的な答えとサンプルコードです。
\r
は、ASCII文字セットからのキャリッジリターンの文字列表現です。 8進数の015
[chr(0o15)
]、16進数の0d
[chr(0x0d)
]、または10進数の13
[chr(13)
]と同じです。退屈な読み取りについてはman ascii
を参照してください。それ(\r
)はかなり移植性のある表現であり、人々が読むのに十分なほど簡単です。それは非常に単純に、紙を進めずにタイプライターのキャリッジを最初の位置に戻すことを意味します。これはCR
のCRLF
部分であり、これは改行と改行を意味します。
print()
はPython 3の関数です。Python2(使用したいバージョン)では、print
は__future__
モジュールからその定義をインポートすることによって関数に強制することができます。 print
関数の利点は、最後に何を印刷するかを指定できることです。\n
のデフォルトの動作をオーバーライドして、すべてのprint()
呼び出しの最後に改行を印刷することができます。
sys.stdout.flush
は、標準出力の出力をフラッシュするようにPythonに指示します。ここで、特に指定しない限り、print()
を使用して出力を送信します。 python -u
を指定して実行するか、環境変数PYTHONUNBUFFERED=1
を設定して、import sys
およびsys.stdout.flush()
呼び出しをスキップしても同じ動作を得ることができます。これを実行することによって得られる量はほぼ正確にゼロであり、アプリケーションが正常に動作する前にそのステップを実行する必要があることを都合よく忘れている場合、デバッグするのは非常に簡単ではありません。
そしてサンプルです。これはPython 2または3でも完全に動作します。
from __future__ import print_function
import sys
import time
ANS = 42
FACTORS = {n for n in range(1, ANS + 1) if ANS % n == 0}
for i in range(1, ANS + 1):
if i in FACTORS:
print('\r{0:d}'.format(i), end='')
sys.stdout.flush()
time.sleep(ANS / 100.0)
else:
print()
念のため、配列に値をあらかじめ保存している場合は、次の形式でそれらを呼び出すことができます。
for i in range(0,n):
print arr[i],
print()には、デフォルトで「\ n」に設定されている組み込みパラメーター「end」があります。print( "This is America")の呼び出しは、実際にprint( "This is America"、end = "\ n")を呼び出しています。簡単な方法は、print( "This is America"、end = "")を呼び出すことです