2015/01/27

Python Tips:ワンライナーが書きたい

Pythonでワンライナーコマンドを書く方法をご紹介します。

Pythonでワンライナーを書くには c オプションを使います。
python -c "print("hello world")"
# hello world と出力される
ヘルプドキュメントによると、 c は cmd の c だとか。個人的にはc というのはあまり直感的でなくて覚えにくい気が、します。。

引数を扱いたい場合には sys.argv を使います。
python -c "import sys; print(sys.argv)" a b c def
# ['-c', 'a', 'b', 'c', 'def'] と出力される

sys.argv を使えば、たとえば、引数の合計値を計算することなんかもできます。
python -c "import sys; print(sum([int(x) for x in sys.argv[1:]]))" 3 4 5
# 合計の 12 が出力される

また、標準入力を扱いたい場合には input() もしくは sys.stdin.read() を使います。
hayato:Desktop$ pwd | python -c "import sys; print(input().split('/'))"
# カレントディレクトリを構成するディレクトリが配列に分割されて表示される

以上です。


・・・ということで、ほんの数例を見てみただけでも、Pythonのワンライナーというのはあまり使い勝手がよい感じではないことがよくわかります笑

他のスクリプト言語のワンライナーや他のコマンドなんかも比べてみても、あえてPythonでワンライナーを書きたくなる場面というのは、あまり多くはなさそうです。

ちなみに、ワンライナーといっても、上で見たようなコードを直接渡すものではなく、モジュールを利用する形のものであれば、使い途はたくさんあるようです。こちらのページに良い例がいくつか紹介されていますのでよろしければ覗いてみてください。
# jsonを整形するなら
$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -mjson.tool
# 簡易ウェブサーバを走らせるなら
$ python -m SimpleHTTPServer


参考
Powerful Python One-Liners - Python Wiki
Python command line oneliners

0 件のコメント: