cursesモジュールを使用する無限ループでPythonプログラムをすばやく終了するには、どのような方法が最適ですか?Python Curses:プログラムの高速終了
私はループの最後でこれと結合NODELAY()メソッドを追加しようとしました:
if screen.getch() == ord('q'):
break
しかし、それはループの1回の繰り返しのすべての関数呼び出しを行うために2〜3秒かかります。また、アプリケーションのために、5秒ごとよりも頻繁にループを実行するのは理にかなっていません。これは、プログラムを終了させる私のやり方が働くために、「q」を2〜8秒間押さなければならないことがあることを意味します。
私のコードは次のようになります。
loop = 1
while loop:
#Loop code
if screen.getch() == ord('q'):
loop = -1
この方法では、押して終了するには「Q」を保持する必要がない。
import curses
import time
def main(screen):
refresh_rate = 5
screen.nodelay(1)
# Infinite loop. Displays information and updates it
# every (refresh_rate) # of seconds
while True:
# Makes several http requests
# and passes responses through multiple functions
# Escape infinite loop
if screen.getch() == ord('q'):
break
# Wait before going through the loop again
time.sleep(refresh_rate)
if __name__ == "__main__":
curses.wrapper(main)
私の他のソリューションが持つ真の間、交換しましたプログラム。しかし、 'q'を一度押して終了するまでには最大8秒かかることがあります。
明らかな理由から、これはプログラムを終了する最良の方法ではないようです。私はかなり良い(より速い)解決策があるはずだと確信しています。
それ以外は、プログラムは正常に動作します。 2行に300行以上のファイルがあるので、コードの関連部分だけを試した解決策で投稿しています。
これはまさに私が探していたものです!getch/napmsループからの破損が明らかにメインループから壊れることはないので、ループを別の関数の中に置かなければなりませんでした。そこで、getch/napmsループ内の 'break'を' return'に置き換えました。ありがとうございました。 –