0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者でもわかるPython sysモジュール|カレンダー作成で学ぶ実践例つき

Last updated at Posted at 2025-09-02

はじめに

pythonにてcalendarモジュールを使わずにカレンダーを作成しました。その際に、sysモジュールについて勉強したのでまとめていきます。

sysモジュールとは

pythonに元々入っているモジュールです。syssystemの略です。

sysモジュールの役割

「Pythonインタプリタそのものを操作したり、インタプリタに渡された情報を取得できる」ということです。

pythonインタプリタとは

ターミナルにてpythonコマンドを叩くと起動します。プロンプトに>>>が表示されその場でコードを入力して実行できます。

pythonインタプリンタ例

terminal
# 今回はpython3で実施
python3
Python 3.13.6 (v3.13.6:4e665351082, Aug  6 2025, 11:22:35) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
# Hello Worldと出力する
>>> print("Hello World")
Hello World

sysモジュールを使えばこういったインタプリタそのものを操作したり、インタプリタに渡された情報を取得できます。

sysモジュールの準備

ファイルの一番上にこのように書くことでsysモジュールが使えるようになります。

# sysモジュールをインポート
import sys

補足ですが、importは下記のような順番で記載します。

1.標準ライブラリ
2.サードパーティライブラリ
3.自分たちのライブラリ
4.ローカルのライブラリ

sysモジュールは、標準ライブラリなので一番上に記載します。

基本でよく使うもの

sys.argv

役割:受け取ったインタプリタをリストにする関数です

具体例

test.py
# sysモジュールをインポート
import sys
# 受け取ったインタプリタを変数colorsに格納
colors = prsys.argv
# 変数colorsの中身を確認
print(colors)

terminal
$ python3 test.py red green blue
実行結果
['test.py', 'red', 'green', 'blue']

というように、sys.argvを使うと渡した値をリストとして使うことができます。

sys.exit

役割:Pythonプログラムを強制的に終了するための関数です

具体例

test.py
import sys

print("処理開始")
sys.exit()
print("ここには到達しない")

終了コードの種類
sys.exit()に数値を渡すと「終了コード」としてOSに返すことができる。

  • 0 → 正常終了
  • 0以外 → エラー終了
import sys

if len(sys.argv) < 2:
    print("引数が足りません")
    sys.exit(1)  # エラー終了

print("引数OK")
sys.exit(0)      # 正常終了

実行結果
引数OK

sys.path

役割:Pythonがモジュールを探すときに参照するパス(ディレクトリ)の一覧を保持するリストです

test.py
print(sys.path)

実行結果
# 参照するパス(ディレクトリ)の一覧がリストで格納されている
username@usernamnoMacBook-Air sysモジュール % /usr/local/bin/python3 /Users/username/Desktop/sysモジュール/sys.py
['/Users/username/Desktop/sysモジュール', '/Library/Frameworks/Python.framework/Versions/3.13/lib/python313.zip', '/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13', '/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages']

Pythonでimport モジュール名をするとき、インタプリタはsys.pathに登録されたディレクトリを順番に探します

もし対象のモジュールがsys.pathのどこにも存在しなければ、ModuleNotFoundErrorが発生します

具体例
1. カレントディレクトリで実行する場合

カレントディレクトリ(実行している場所)は自動的にsys.pathに入っているので、その中のファイルは問題なくimportできます

ディレクトリ構造
project/
 ├─ tools.py
 └─ test.py

test.py
# インポート可能
import tools

2. sys.path に入っていない場所で実行する場合

別の場所にあるファイルは、そのままではimportできません

utils/
 └─ tools.py
test.py

test.py

import tools   # ModuleNotFoundError !!

別の場所にあるファイルからimportする方法

sys.pathにファイルがファイルがあるディレクトリを絶対パスで追加します
sys.pathはリストなので、appendが使用できます

test.py
import sys

# モジュールがあるディレクトリを追加(絶対パス推奨)
sys.path.append("/Users/username/project/utils")

import tools   # 使用可能になる

応用例(実践コード)

実装内容:calendarモジュールを使わずにカレンダーを実装

  • -mオプションで月を指定できるようにする(今年が2025年ならpython3 calender.py -m 6で2025年6月のカレンダーになる)
  • 引数を指定しない場合は、今月・今年のカレンダーが表示される
  • -mの引数が不正な月の場合は次のエラーを出す
terminal
python3 calendar.py -m 22
22 is neither a month number (1..12) nor a name
実装コード
# sysモジュールをインポート
import sys
# datetimeモジュールをインポート
import datetime as dt

# 入力した文字列をリスト化する
sys.argv

# 現在の日時を取得し、now変数に代入
now = dt.datetime.now()

# もし"-m"が入力されたらそれをindexとして指定
# その後に入力されたstringをintegerに変換して変数monthとして定義する
month = now.month
if "-m" in sys.argv:
    idx = sys.argv.index("-m")
    # "-m"の次に数字が入っているかを確認し、入っていなかったら現在の月をmonthとして定義する
    if idx + 1 < len(sys.argv):
        try:
            month = int(sys.argv[idx + 1])
            if month < 1 or month > 12:
                raise ValueError(
                    f"{month} is neither a month number (1..12) nor a name"
                )
        except ValueError as e:
            print(e)
            sys.exit(1)

まとめ

まとめると下記のようになります

  • sysモジュールとは「Pythonインタプリタを操作したり、実行時の情報を取得するための標準ライブラリ」である

  • よく使うのは以下の3つ

    • sys.argv : コマンドライン引数をリストとして受け取る
    • sys.exit : プログラムを強制終了する
    • sys.path : モジュールを探すディレクトリのリスト

インタプリタの情報を使う上で重要なモジュールということがわかりますね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?