剥いだ布団とメモランダム.old

情報系のことをかいてゆく

コマンドライン引数入力できるPythonプログラムをつくる

まあこんなこと、ググってしまえばすぐに出るですけどね。
調べて、実践的に使ってみたので、備忘録として。

コマンドライン引数ってなに

コマンドライン引数っていうのは、OSの端末(コマンドプロンプトとかです)で

python example.py hoge1 hoge2

実行するコマンド(例ではpython)のあとに入力するもののこと(example.py hoge1 hoge2)です。
上の例ではhoge1とhoge2の2つを入力してますね。
こうすることで、作ったプログラムを使いやすく(個人的雑感)してやります。

これはPython以外にもCとか他の言語でもかけます。今回はPythonで。

なにつくったの

今回は、2つの数字を入力して、それらの最も簡単な比を出力するという単純なプログラムです。

やってることは
コマンドライン引数として2つの数字を入力
ユークリッドの互除法で2数の最大公約数を求める
・それぞれ、求めた最大公約数でわってやって、出力
です。

じゃあプログラムを。

# -*- coding: utf-8 -*-
#コマンドライン引数にて2数を入力し、それらの最も簡単な比を出力	
import sys

def main():
	argv = sys.argv
	argc = len(argv)
	if (argc != 3):
		#引数がちゃんとあるかチェック
		#正しくなければメッセージを出力して終了
		print 'Usage: python %s arg1 arg2' %argv[0]
		quit()
	x = int(argv[1])	#コマンドライン引数は文字として入力される
	y = int(argv[2])	#今回は整数として扱いたいので、キャストする	
	gcd = getGcd(x, y)
	print '%d : %d' %(x / gcd, y / gcd)

def getGcd(x, y):
	if (x < y):
		tmp = x
		x = y
		y = tmp

	while (y != 0):
		tmp = y
		y = x % y
		x = tmp

	return x

if __name__ == '__main__':
	main()

実行結果

$ python gcd.py 10 8
5 : 4

考察その他

sysモジュールをインポートすれば、sys.argvに文字列のリストの形で、コマンドライン引数が格納されています。
記事の序盤でさらっと書いていますが、コマンドライン引数の一番最初は実行するプログラム名のことですので、
実際は、1番目以降の要素を扱うことになります。

なので、len()を使えば簡単に入力された引数の数を確かめられます。

文字列として取得しているので、今回のように整数値として扱う場合はint()でキャスト。


そういえば、何気なくprintのフォーマット表記を使っています。
%演算子は基本、Cでのフォーマットとあんまり変わらないっすね。


今回のmain関数の序盤は他のプログラムでもテンプレで使えそうです。


余談ですけども、argpardeというコマンドライン引数まわりのモジュールがあって、
こいつを使うといい感じにパースしてくれるっぽいです(使ったことない)