Javaのpublic static void main()的なやつすら知らないので、まずはHelloWorldでも。
最終的にそこそこのステップがあるプログラムを作るので対話型ではなくモジュール(Pythonではプログラムを記述したファイルをこう呼ぶらしい)を作って実行。
helloworld.py
# -*- coding: utf-8 -*- if __name__ == "__main__": print "Hello World."
1行目の「# -*- coding: utf-8 -*-」はソースのエンコード指定。上記ソースでは特に非ASCII文字が記述されているわけではないが、日本語を記述するときのためにおまじないのように書いておけばよさそう。
3行目の「if __name__ == “__main__”:」がJavaでいうところのmain()メソッドのようなもの。「__name__」という特殊な変数にはモジュール名(通常はファイル名の.pyの前の部分)が格納されるのだが、コマンドラインから実行された場合のみ「__main__」となり、このifブロックの中はコマンドラインから実行された場合のみ処理されることになる。
上記ソースの場合は他のモジュールにimportされるようなものではなくスクリプトとして実行(コマンドラインから動かすことをそう言うらしい)するためのものなので全ての処理をトップの階層に記述しても動きは同じだが、勉強なので何となく明示的に記述してみた。(mainなしでベタに書いたらbashのシェルスクリプトのようなイメージ。お気軽にやるならそれで全然いいと思う。)
実行してみる。
$ python helloworld.py Hello World.
次に、コマンドライン引数を受け取る方法を試す。
とりあえず受け取った文字列をそのまま標準出力に表示。
cmdarg_sample.py
# -*- coding: utf-8 -*- import sys if __name__ == "__main__": arg = sys.argv print "input file = " + arg[1] print "output file = " + arg[2]
コマンドライン引数はsysというモジュールのargvという配列に格納されるらしい。sysを使うために3行目でimport。Javaの場合Systemクラスなどはimport不要だが、Pythonは何でもimportが必要なのかな。
引数の配列はarg[0]から始めたくなるところだが、arg[0]にはモジュールのファイル名が入ってくるよう。よって実質的にarg[1]から。(確かにpythonコマンドから見たらモジュールファイル名が第一引数か…)
$ python cmdarg_sample.py input.csv output.csv input file = input.csv output file = output.csv
とりあえず今日はここまで。