或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。おバカなことが大好きです。

Linux IPythonでシステムシェルコマンドを一通り叩いてみた

pythonのsysモジュールを使えば一通りのファイル操作を実装することも出来るが、面倒だしシステムシェル(bash等)を使えば済むものはそっちを使ったほうが早い。

IPythonを起動

$ipython
Python 2.7.3 (default, Sep 26 2012, 21:53:58) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13.1.rc2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: 

IPythonのプロンプトの変更

doctest_modeを使った。他にも方法はあると思われる。

In [1]: doctest_mode
Exception reporting mode: Plain
Doctest mode is: ON

現在のディレクトリを参照

>>> pwd
u'/home/tom'

ファイル一覧表示

>>> ls
Desktop/    Downloads/  Pictures/  Templates/  data/  tempdir/
Documents/  Music/      Public/    Videos/     src/   tools/

ディレクトリ移動

>>> ls
>>> cd data/
/home/tom/data
>>> ls

新規ファイル作成

>>> !touch new.txt
>>> ls
new.txt

IPythonからシステムシェルコマンドを呼び出す場合は、

!cmd

という風に、システムシェルコマンドの前に!をつける。新規ファイル作成に関しては、IPythonでデフォルトで用意していないようなので、システムシェルコマンドを使用した。

エコー

>>> !echo "spam" > new.txt

ファイル内容確認

>>> cat new.txt
spam

ファイルコピー

>>> cp new.txt new.txt2
>>> ls
new.txt  new.txt2

ディレクトリ作成

>>> mkdir egg
>>> ls
egg/  new.txt

ファイル移動

>>> mv new.txt2 egg/
>>> ls egg/
new.txt2

ファイル削除

>>> ls
egg/  new.txt
>>> rm new.txt
rm: remove regular file `new.txt'? y

rmコマンドのオプションの-iが付いているよう。*1

ディレクトリ削除

>>> ls
egg/
>>> rm -rf egg/
>>> ls

ヒストリ表示

打ち間違って変なヒストリが入っているかもしれませんが、ご了承を。ヒストリが上手く保存されているかどうかの確認用ということで。

>>> rm -rf egg/
>>> ls
>>> history
doctest_mode
pwd
ls
cd data/
ls
!touch new.txt
ls
!echo "spam" > new.txt
cat new.txt
pwd
mkdir egg
ls
cp new.txt new.txt2
ls
mv new.txt2 egg/
ls egg/
ls
ls
rm new.txt
ls
ls
rm -rf egg/
ls
history
>>> 

IPythonの終了

>>> quit()
$

まとめ

IPythonからLinuxコマンドはだいたい使える。一部、未実装なのか、私の使い方が悪いからなのかわからないけれども、システムシェルコマンドを呼び出せば事足りるため、まぁいいかという感じ。。。

次回

Windows IPythonでも使ってみようっと。

*1:rm -i ファイルの削除前に問い合わせる