yoraba build

備忘録を兼ねた技術ブログ

実践xonsh第一回

実践xonsh第一回 xonshをインストールしたのはいいですが、CUIに慣れていないこともあり、 如何に活用するか、という壁にぶつかってしまいました。 思うに、これは一朝一夕で片付くような課題ではなく、 日々実践を重ね、少しずつ習熟していくものなのでしょう。 というわけで、これから不定期にxonshの活用術やスクリプトの記事を書いていこうと思います。

何故xonshを使うのか

まず、xonshを使うにあたって、何故、どういった効果を見込んで使うのかを整理すべきだと思いました。 - ## シェルとpythonを使い分けてスクリプトをシンプルに書く シェルで書いた方が簡単な処理、pythonで書いた方が簡単な処理、 それぞれあると思います。簡単な方を選べばスクリプトがシンプルになります。 - ## pythonの豊富なライブラリを利用して高度なシステム制御を行う シェルの出力をpythonのライブラリを利用して処理することで、監視やメンテナンスなどの 定常的なタスクを省力化するだけではなく、今までは難しかった高度な制御が簡単に実現できるかもしれません。 データベースやWebとの連携、分析など、幅広い可能性があります。

実践

シェルとpythonのコードの組み合わせ

コマンドとコードを混在させる為には記号と括弧を組み合わせた構文を使用します。

for i in $(ls).split(): ![cat @(i)]

関数の定義

何度も繰り返し実行するような処理は関数を定義して保持しておきたいです。 関数はpythonの構文をベースとして書けます。 エイリアスを設定することでコマンドライクに呼び出すことが出来ます。

def _cat_files(args, stdin=None):
    for i in $(ls).split(): ![cat @(i)]

aliases["cat_files"] = _cat_files
cat_files

スクリプトファイル保存とインポート

xonshスクリプトはxshという拡張子で保存します。 xshファイルはpythonライクにインポート出来ます。

echo "def test_method(args, stdin=None):print($(pwd))" > test_xonsh.xsh
from test_xonsh import * 
test_method([])  

起動時インポート

.xonshrcにインポート処理を書くことで、xonsh起動時にスクリプトファイルをインポート出来ます。

任意のディレクトリに配置したスクリプトファイルを、 起動時にインポートしたい場合、PATHに注意する必要があります。

import sys
home = $(echo $HOME).strip()
sys.path.append(f'{home}/xonsh_scripts')
from default import *

sys.pathにスクリプトフォルダの絶対PATHを追加します。 上のコードはHOME以下にxonsh_scriptsというフォルダを作成し、 default.xshという名前でスクリプトファイルを作成した場合の例です。