プログラミングなど主にパソコン関係のことを備忘録的に書いていく予定のブログです。
>>> 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↑