Pythonで実行中のスクリプト名を取得して出力する方法
今回は、Pythonで「現在実行中のスクリプト名(ファイル名)」を取得して出力するプログラムを作成します。コード自体は非常にシンプルで、標準ライブラリの sys モジュールを使うだけで実現できます。
スクリプト名の取得の仕組み
Pythonでは、コマンドラインから渡された引数が sys.argv というリストに格納されます。このリストには、以下のような情報が入っています。
- 第1要素(sys.argv[0]):実行されたスクリプトのパス(ファイル名を含む)
- 第2要素以降:プログラムに渡された各種引数
C言語やC++における main(int argc, char** argv) の argv[0] に相当するものが、Pythonでは sys.argv[0] になります。これを利用すれば、実行中のスクリプト名を簡単に取得できます。
また、フルパスからファイル名だけを取り出したい場合は、文字列の rfind() メソッドで最後の区切り文字(Windowsなら「\\」、Linux/macOSなら「/」)の位置を特定し、スライスで切り出す方法が使えます。
サンプルコード
import sys
def main():
# 実行中のスクリプトのフルパスを取得
my_program = sys.argv[0]
# 最後の「\\」以降を切り出してファイル名だけにする
my_index = my_program.rfind("\\") + 1
my_program = my_program[my_index:]
# スクリプト名を出力
print("Program Name: %s" % my_program)
# メインブロック
if __name__ == "__main__":
main()実行結果
Program Name: C:/Users/TP/Desktop/PYTHON FOLDER/python241-280/python277.py
補足:より簡単な方法
上記のように手動でスライスする以外にも、標準ライブラリの os.path.basename() を使うと、OSの違いを意識せずにファイル名だけを取得できます。
import sys
import os
print("Program Name:", os.path.basename(sys.argv[0]))さらに、Python 3.4以降では pathlib.Path(sys.argv[0]).name というモダンな書き方も可能です。環境に応じて使い分けると良いでしょう。
-
【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装
はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題の概要 2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。 入力例 N = 10 K = 4 出力例 10 6 2 -2 2 6 10 アルゴリズムの考え方 N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。 加算と減算は同じ1つの関数
-
ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法
本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに