チュートリアル:イベント

xonshで情報を保持する最善の方法は何ですか?イベントを購読する!

概要

単純に、イベントとは、さまざまな種類のxonshが、何が起こっているのかを互いに伝えるための方法です。現在のディレクトリが変更された場合や、コマンドが実行される直前など、何らかのメモが発生した場合に起動されます。

xonshは独自のイベントシステムを持っていますが、他のイベントシステムと似ているわけではありません。あなたがイベントを知っているなら、これは理解しやすいはずです。そうでなければ、この文書はあなたのために余分です。

私にコードを教えてください!

大丈夫、大丈夫!

これは、現在のディレクトリが変更されるたびにcdpushd(または他のいくつかのコマンドのために)ファイルに行を追加します:

@events.on_chdir
def add_to_file(olddir, newdir, **kw):
    with open(g`~/.dirhist`[0], 'a') as dh:
        print(newdir, file=dh)

渡された正確な引数と期待される戻り値は、イベントごとに異なります。詳細は イベントリストを参照してください。

イベントシステムはキーワードのみであることに注意してください。イベントハンドラは引数名と一致する必要があり、**kw将来の変更に対する保護としてasを持つ必要があり ます。

これも使えますか?

はい!それは簡単です!あなたのxontribでは、次のようなことをしなければなりません:

events.doc('myxontrib_on_spam', """
myxontrib_on_spam(can: Spam) -> bool?

Fired in case of spam. Return ``True`` if it's been eaten.
""")

これにより、ユーザーはコールhelp(events.myxontrib_on_spam)して有用な出力を得ることができます

さらなる読書

使用可能なイベントの完全なリストについては、イベントのリファレンスを参照してください

イベントが何を起きさせるかについての詳細な詳細については、「高度なイベント」を参照してください