厨二病患者のプログラミング入門

プログラミングなど主にパソコン関係のことを備忘録的に書いていく予定のブログです。

PREV | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

訓練されたPythonistaのための、ログインシェルをpythonにするライブラリ

perlやrubyなどには、コマンドを「`」で囲むとそのコマンドを実行し、標準出力に書きだされた文字列を返す機能があります。
これがなかなか便利な機能で、特にirbの起動中などに、「あ、やっぱりこのスクリプトの名前はhoge.rbじゃなくてfuga.rbのほうがいいかな」と思ったときなどに重宝します。

そんな感じの機能がPythonにもあったらいいなーと思ったので、似たような機能のライブラリを作ってみました。

https://github.com/DRascal/PySh

使い方は以下のようになります。
>>> import sh
>>> hoge = sh.sh_exec('ls -lh')
>>> print hoge
合計 8.0K
-rw-r--r-- 1 drascal users 3.2K  8月  3 09:27 sh.py
-rw-r--r-- 1 drascal users 3.8K  8月  3 09:50 sh.pyc
ここからはおまけ機能(実はこっちがメイン)になりますが、シェルのコマンドをPythonの関数のようにして使う機能もあります。
>>> sh.ls()
<sh.ShellCommandResponse object at 0xb738208c>
sh.py
sh.pyc
>>> sh.ls('-lh')
<sh.ShellCommandResponse object at 0x82e876c>
合計 16K
-rw-r--r-- 1 drascal users   27  8月  3 11:03 hoge.txt
-rw-r--r-- 1 drascal users 3.4K  8月  3 11:03 sh.py
-rw-r--r-- 1 drascal users 4.1K  8月  3 11:03 sh.pyc
>>> sh.ls(sort='extension') # ls --sort=exxtension
<sh.ShellCommandResponse object at 0x82e85cc>
sh.py
sh.pyc
hoge.txt
実際はlsが別プロセスで動くために表示がずれますが、今回は見やすいように若干出力を修正しています。
さらに、この関数はリダイレクトやパイプによるコマンドの連結もサポートしています。
>>> sh.cat()
<sh.ShellCommandResponse object at 0xb73a92ec>
>>> sh.ls() > 'hoge.txt'
<sh.ShellCommandResponse object at 0xb6e2688c>
>>> sh.echo('hoge') >> 'hoge.txt'
<sh.ShellCommandResponse object at 0x82c966c>
>>> sh.cat() < 'hoge.txt'
<sh.ShellCommandResponse object at 0x82c96ac>
hoge.txt
sh.py
sh.pyc
hoge
>>> sh.echo('ほげ') | sh.nkf('--katakana')
<sh.ShellCommandResponse object at 0xb6e1296c>
ホゲ
しかし、Pythonの>演算子の動作のせいで、次のような方法でリダイレクトルすることはできません。
>>> sh.cat() < 'hoge.txt' > 'fuga.txt'
True
hoge.txt
sh.py
sh.pyc
hoge
原因はPythonがこれらの比較演算子を、sh.cat() < 'hoge.txt' and 'hoge.txt' < 'fuga.txt'というように解釈してしまうせいです。次のように括弧をつければ正常に動作します。
>>> (sh.cat() < 'hoge.txt') > 'fuga.txt'
<sh.ShellCommandResponse object at 0x82e85ac>
>>> sh.cat('fuga.txt')
<sh.ShellCommandResponse object at 0x82e8ccc>
hoge.txt
sh.py
sh.pyc
hoge
信心深いPythonistaで、どんな時でもPythonを触っていたいと考える方は、これを使ってログインシェルをPythonにしてはいかがでしょうか?

| Python | 20:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://drascal.blog133.fc2.com/tb.php/227-1ea0babe

TRACKBACK

PREV | PAGE-SELECT | NEXT