コマンド行の取得

例72 コマンド行の取得テスト

[任意]ファイル名: cmdline.py エンコーディング: UTF-8

#! /usr/bin/python
# -*- coding: utf-8 -*-

# コマンド行の取得テスト

print ('コマンド行の取得テスト')

# コマンド行のデータにアクセスするために必要なsysという追加の機能(モジュール)を読み込む処理
import sys

# コマンド行の要素はsysモジュールのargvというリスト型データに入っている
# これにアクセスするにはモジュール名と中のデータとの間に「.」を付けて「sys.argv」とする
# リスト型は複数のデータが並んだもので角括弧で囲んだ数字を付けると個別の項目が取り出せる
# sys.argv[0]はsys.argvの先頭の項目でスクリプトの場所が入っている
print ('このスクリプト:', sys.argv[0])

try:
  print ('最初の引数は', end='')
  print (sys.argv[1])
  print ('2番目の引数は', end='')
  print (sys.argv[2])
  print ('3番目の引数は', end='')
  print (sys.argv[3])
  print ('4番目の引数は', end='')
  print (sys.argv[4])
  print ('5番目の引数は', end='')
  print (sys.argv[5])
  # もちろん6番目からも同様に取り出せる
except IndexError:
  # リストの中のデータが存在しない番号にアクセスするとIndexErrorという通知(例外)が発生する
  print ('ありません')

# リスト型の要素数はlen()という関数で得られる
# sys.argvの要素数はスクリプト自身を含めたコマンド行の要素数となる
# コマンド行引数の数はこれより1引いたものとなる
print ('コマンド行の長さは', len (sys.argv), ', その中でコマンド行引数の数は', len (sys.argv) - 1)

# sys.argvの個別の内容をargという変数に入れながら
# 全ての内容について繰り返し処理する構文(for文)
i = 0
for arg in sys.argv:
  print ('sys.argv[{0}]: {1}'.format (i, arg))
  i += 1  # 元の値に1足す

print ('終わり')

実行例:

(引数なし)
$ [cmdline.pyの場所]
コマンド行の取得テスト
このスクリプト: [cmdline.pyの場所]
最初の引数はありません
コマンド行の長さは 1 , その中でコマンド行引数の数は 0
sys.argv[0]: [cmdline.pyの場所]
終わり

(2つの引数を指定)
$ [cmdline.pyの場所] foo bar
コマンド行の取得テスト
このスクリプト: [cmdline.pyの場所]
最初の引数はfoo
2番目の引数はbar
3番目の引数はありません
コマンド行の長さは 3 , その中でコマンド行引数の数は 2
sys.argv[0]: [cmdline.pyの場所]
sys.argv[1]: foo
sys.argv[2]: bar
終わり

(6つの引数を指定)
$ [cmdline.pyの場所] aaa bbb ccc ddd eee fff
コマンド行の取得テスト
このスクリプト: [cmdline.pyの場所]
最初の引数はaaa
2番目の引数はbbb
3番目の引数はccc
4番目の引数はddd
5番目の引数はeee
コマンド行の長さは 7 , その中でコマンド行引数の数は 6
sys.argv[0]: [cmdline.pyの場所]
sys.argv[1]: aaa
sys.argv[2]: bbb
sys.argv[3]: ccc
sys.argv[4]: ddd
sys.argv[5]: eee
sys.argv[6]: fff
終わり