私は5分ごとにマテリアルを取得するirlミニゲームに取り組んでいます。 これを監視するには、単純なpythonスクリプトを書こうと思っていました。 しかし、少しのロードブロッキングがあります。他のコマンドを実行しているときのPythonバックグラウンドループ
ループを中断することなく他のキーボード入力を実行している間に、何分何かを行うループを作成するにはどうすればよいですか?
私は5分ごとにマテリアルを取得するirlミニゲームに取り組んでいます。 これを監視するには、単純なpythonスクリプトを書こうと思っていました。 しかし、少しのロードブロッキングがあります。他のコマンドを実行しているときのPythonバックグラウンドループ
ループを中断することなく他のキーボード入力を実行している間に、何分何かを行うループを作成するにはどうすればよいですか?
あなたの仕事にはタイマーが役に立つかもしれません。このリンクを確認することをお勧めします:https://docs.python.org/2.4/lib/timer-objects.html。タイマーがカウントしている間に他のタスクを実行することができます。時間が経過すると、タイマーに機能を付加して何かを行うことができます。このライブラリのタイマーはから継承されています。スレッド
古典的なPython 2.4のドキュメントにリンクする特別な理由はありますか?最新のバージョンは[こちら](https://docs.python.org/3/library/threading.html#timer-objects)です。 –
私の間違いだったのですが、Python 2.xであることを認識していませんでした。次回はどのバージョンにリンクしているのですか?しかし、アイデアは同じです、私はそれが問題の良い解決策だと信じています – JBeloqui
threading.Timerを使用すると、かなり簡単な例があります。ユーザー入力に応答している間に5秒ごとに現在の時刻を表示します。
このコードは、ANSI/VT100ターミナルコントロールエスケープシーケンスをサポートするすべてのターミナルで実行されます。あなたはKeyboardInterrupt
を送信する必要が
#!/usr/bin/env python3
''' Scrolling Timer
Use a threading Timer loop to display the current time
while processing user input
See https://stackoverflow.com/q/45130837/4014959
Written by PM 2Ring 2017.07.18
'''
import readline
from time import ctime
from threading import Timer
# Some ANSI/VT100 Terminal Control Escape Sequences
CSI = '\x1b['
CLEAR = CSI + '2J'
CLEAR_LINE = CSI + '2K'
SAVE_CURSOR = CSI + 's'
UNSAVE_CURSOR = CSI + 'u'
GOTO_LINE = CSI + '%d;0H'
def emit(*args):
print(*args, sep='', end='', flush=True)
# Show the current time in the top line using a Timer thread loop
def show_time(interval):
global timer
emit(SAVE_CURSOR, GOTO_LINE % 1, CLEAR_LINE, ctime(), UNSAVE_CURSOR)
timer = Timer(interval, show_time, (interval,))
timer.start()
# Set up scrolling, leaving the top line fixed
emit(CLEAR, CSI + '2;r', GOTO_LINE % 2)
# Start the timer loop
show_time(interval=5)
try:
while True:
# Get user input and print it in upper case
print(input('> ').upper())
except KeyboardInterrupt:
timer.cancel()
# Cancel scrolling
emit('\n', SAVE_CURSOR, CSI + '0;0r', UNSAVE_CURSOR)
は、つまり、あなたのソースコード(あるいは少なくとも関連部分)を提供
、このプログラムを停止するCtrlキーCを打つ – Fabien
まず、これはどのように学ぶ読みます以下のリンクから質問をするhttps://stackoverflow.com/help/asking – Kallz
私たちはここでチュートリアルを提供するつもりはないが、ルールを曲げさせる。コードを* threads *に編成する方法については、おそらく読む必要があります。これらのスレッドの1つが5分ごとに目を覚まして何かをするでしょう。もう一方のスレッドは、キーボードとマウスのイベントを処理するために連続して実行されているように見えます。 –