cmdに基づいてオペレータ端末を維持しています。顧客は警告動作を要求しました。例えばいくつかの非同期イベントが発生したときに画面に表示されるメッセージ。アラートを定期的にチェックするスレッドを作成し、見つかったときにstdoutに出力します。Python cmdモジュール - 非同期イベント後にプロンプトを再開
は、これはOK動作しているようですが、それは非常にエレガントないないようだ、それは問題があります。警告を知らないcmdが起こったので、メッセージが空白で、画面上に続いている
を。コマンドプロンプトは再印刷されず、ユーザーの入力は保留されたままになります。
Python cmdの間に非同期アラートを行う良い方法はありますか?メソッドをそのまま使用すると、cmdを中断してプロンプトを再描画できますか?
私はStringIOを使ってstdinで改行を突き止めようとしましたが、これは理想的ではなく、正しく動作していません。
例コード:
import cmd, sys
import threading, time
import io
import sys
class MyShell(cmd.Cmd):
intro = '*** Terminal ***\nType help or ? to list commands.\n'
prompt = '> '
file = None
def alert(self):
time.sleep(5)
print ('\n\n*** ALERT!\n')
sys.stdin = io.StringIO("\n")
def do_bye(self, arg):
'Stop recording, close the terminal, and exit: BYE'
print('Exiting.')
sys.exit(0)
return True
def do_async(self, arg):
'Set a five second timer to pop an alert.'
threading.Thread(target=self.alert).start()
def emptyline(self):
pass
def parse(arg):
'Convert a series of zero or more numbers to an argument tuple'
return tuple(map(int, arg.split()))
if __name__ == '__main__':
MyShell().cmdloop()