2.3 __name__ の利用, コマンド・ライン引数

prog3.py

#!/usr/bin/env python3
print("これは常に実行される")
 
def test():
    print("関数:testを呼び出しました")
 
if __name__ == "__main__":
    print("ここは単独のスクリプトとして起動された場合のみ実行する")
    test()

% ./prog3.py
これは常に実行される
ここは単独のスクリプトとして起動された場合のみ実行する
関数:testを呼び出しました
% 

コマンド・ライン引数は sys.argv で得られる。 C言語の argc はないが len(sys.argv) で分かる。 C言語では atoi(), atof() を良く使うが、 Python では int(), float() を使えば良い。
if __name__ == "__main__":
    argc = len(sys.argv)
    if argc == 1:
        testrungekutta()
    elif argc == 2:
        testrungekutta(float(sys.argv[1]))
    elif argc == 3:
        testrungekutta(float(sys.argv[1]), int(sys.argv[2]))

この機能は便利だが、Jupyter notebook で実行した場合も、 __name__ == "__main__" は真になり、 sys.argv[1] は '-f', sys.argv[2] は 'なんとか.json' になるので、それに対応するようにするには一工夫が必要そう。
あまり自信のない書き直し
if __name__ == "__main__":
    argc = len(sys.argv)
    if argc == 1:
        testrungekutta()
    elif argc == 2:
        testrungekutta(float(sys.argv[1]))
    elif (argc == 3 and sys.argv[1] != '-f'):
        testrungekutta(float(sys.argv[1]), int(sys.argv[2]))
    else:
        print('usage: testrungekutta(Tmax=50.0,N=1000)')



桂田 祐史