質問: pythonで任意の拡張子をもつファイルを削除するプログラムを書きました。 いちいちファイルの場所に行って Python hogehoge.py とするのは面倒なので、unixコマンドのように lsや、cd ~/hogehoge など簡単なコマンドでファイルを実行したいと考えています。 これを実現するためのモジュールか何かがあれば教えて下さい。 実行環境: Mac, Python3.6
回答: 質問意図と少し外れると思いますが・・・ せっかくunixライクなMacintoshなのですからPython hogehoge.pyと打ち込まなくてもhogehoge.pyが普通のコマンドのように使えるようにしてはいかがでしょうか? 例えば ``` #!/usr/bin/python import sys for arg in sys.argv: print(arg) ``` このようなファイルをecho.pyとして作成しchmod +xで実行権限を付けてやると ``` $ chmod +x echo.py $ ./echo.py hello world ./echo.py hello world ``` (訂正:最初の回答では./echo.pyが印字されることが抜けてました。失礼しました) というぐあいにあたかもecho.pyが組み込みコマンドかのようにして使えます。こうできるカラクリは先頭行に書いた`#!/usr/bin/python`という行です。unix系osではCコンパイラーなどで作成したネイティブな機械語の実行可能ファイルだけでなく実行権限が付与された普通のテキストファイルであっても先頭行が`#!スクリプトインタープリタのパス`となっていれば `起動しようとしているスクリプトファイル名 引数...` のように実行しようとするとあたかも `スクリプトインタープリタ 起動されたファイル 引数...` と起動されたかのように解釈してくれます。これはpythonに限らず一般的なスクリプトインタープリタ(スクリプトファイルを引数にして実行できるようなあらゆるもの。Pythonもそうです。)で使える一般的な方法です。unix系OSの便利な点はこれがbashなどのシェル上から起動された場合のみならず、実行可能ファイルを起動するexecシステムコールレベルでこの機構がサポートされていることで、そのため`find ... -exec コマンド...`などのようにシェル以外から起動されるような場合でも同様に動いてくれます。要するにCコンパイラーのようなものだけがunixでのコマンドを作成する唯一の手段ではなくとても手軽にコマンドが作れるわけですね。 というわけで普段から使うコマンドをpythonなどで作るような場合、例えば`~/bin`に置くことにしておき、.bash_profileに以下のように書いておくことでいつでもどこでもbash上からコマンド名だけで呼び出せます。 ``` ... export PATH="$PATH:~/bin" ``` ``` $ echo.py hello world hello world ``` こうしておくことで、lsやcdを自分でpythonスクリプトに組み込まずとも充分使い勝手のよい自分だけのコマンドecho.pyが出来上がります。hogehoge.pyも同じようにしておけば今のままで充分便利に使えるのではないでしょうか? ちなみにpythonスクリプトは分かり易さのため大抵xxx.pyのように拡張子を.pyにすると思いますが、実際は拡張子が.pyでなくても`python スクリプトファイル名`とすれば動いてくれると思います。つまり上記の方法で動かす際にhogehoge.pyという名前でなくhogehogeというスクリプトファイル名でもよいと思います。コマンド名だけで起動できるのですが末尾の".py"を打ち込むのが面倒ならhogehogeという名前にしてもよいですし、「pythonスクリプトで作成したコマンド」ということが分かった方がよいという理由で拡張子を.pyのままにしておくのもよいと思います。