プログラムで time.sleep(10) を使用しています。プログラムの実行時にシェルにカウントダウンを表示できますか?
>>>run_my_program()
tasks done, now sleeping for 10 seconds
そして、10,9,8,7を実行したい....
これは可能ですか?
プログラムで time.sleep(10) を使用しています。プログラムの実行時にシェルにカウントダウンを表示できますか?
>>>run_my_program()
tasks done, now sleeping for 10 seconds
そして、10,9,8,7を実行したい....
これは可能ですか?
あなたはいつでもできる
#do some stuff
print 'tasks done, now sleeping for 10 seconds'
for i in xrange(10,0,-1):
time.sleep(1)
print i
このスニペットには、各数値が改行で出力されるという、やや面倒な機能があります。これを回避するには、次のことができます。
import sys
import time
for i in xrange(10,0,-1):
sys.stdout.write(str(i)+' ')
sys.stdout.flush()
time.sleep(1)
コンソールから最後の番号をクリアする簡単なソリューション:
import time
for i in range(10,0,-1):
print(f"{i}", end="\r", flush=True)
time.sleep(1)
デフォルトでは、print 関数が設定されますend="\n"
。これは、以降の print の呼び出しが新しい行に出力されることを意味します。これを変更してend="\r"
、各呼び出しの後に出力を置き換えることができます。( Python でキャリッジ リターン "\r" はどのように機能しますか)。
また、使用flush
すると、バッファリングの問題を心配する必要がなくなります。( print() は何をしflush
ますか? )
これはどのように見えるかです:
次のようなカウントダウン機能を実行できます。
import sys
import time
def countdown(t, step=1, msg='sleeping'): # in seconds
pad_str = ' ' * len('%d' % step)
for i in range(t, 0, -step):
print '%s for the next %d seconds %s\r' % (msg, i, pad_str),
sys.stdout.flush()
time.sleep(step)
print 'Done %s for %d seconds! %s' % (msg, t, pad_str)
キャリッジ リターン\r
とコンマ,
により、印刷は同じ行に保持されます (カウントダウン値ごとに 1 行を回避します)。
秒数が減少すると、出力が短くなるときに最後の文字を残すのではなく、pad_str によって最後の行がスペースで上書きされることが保証されます。
最後の出力では、最後のステータス メッセージが完了メッセージで上書きされ、出力行がインクリメントされるため、遅延の証拠があります。
ここに私がしたものがあります:
import time
a = input("How long is the countdown?")
while a != 0:
print a
time.sleep(1)
a = a-1
最後に、もしあなたと他の人なら、アラームか何かを置くことができます。
もちろん、10 から反復カウンターを引いた値を出力するループを作成し、反復ごとに 1 秒間スリープさせて、10 反復実行するだけです。または、さらに柔軟にするには:
def printer(v):
print v
def countdown_timer(duration, step=1, output_function=printer,
prompt='Waiting {duration} seconds.'):
output_function(prompt.format(duration=duration))
for i in xrange(duration/step):
output_function(duration - step * i)