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?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Python】複数のシェルスクリプトのAPIコールを1コマンドですべて実行させる方法

Posted at

概要

とあるディレクトリにある複数のシェルスクリプトファイルを1コマンドで勝手に一つずつ実行させていくコードを書いたので紹介します。

サンプルコード解説

import subprocess
import os

# スクリプトが存在するフォルダのパス(現在のディレクトリとしています)
folder_path = './'

scripts = sorted([files for files in os.listdir(folder_path) if files.endswith('.sh')])

# APIのエンドポイント
api_endpoint = 'http://localhost/api'

for script in scripts:
    script_path = os.path.join(folder_path, script)
    print(f"Executing {script}...")
    subprocess.run(['sh', script_path, api_endpoint])
    print(f"Finished executing {script}.\n")

osモジュールのlistdir関数は、指定されたディレクトリ内のすべてのファイルとディレクトリと名前をlistとして取得する関数。リスト内包表記を使用して、取得したファイル名のリストから.shで終わるファイル名を選択しています。これにより、シェルスクリプトのファイルたちが取得できます。

sorted関数を使用しているのは、ファイル名のリストをアルファベット順にソートしたいためです。特にソートしない場合は順番など関係なくランダムに(?)実施されていくので、ソートして実施した方が分かりやすいと思いました。

あとは、ソートされたシェルスクリプトのリストをループで回し、各スクリプトをsubprocess.run関数を使用して実行していきます。この関数は、指定されたコマンドを実行することができるので外部のシェルスクリプトを実行させる際に使えます。こちらの関数については以前別記事で書いたこともあるのでご参考までに(以下にも書きましたが、例外処理を入れる場合はsubprocess.CalledProcessErrorでキャッチできます)。

詳細にいうと、script_pathで指定されたシェルスクリプトをshコマンドを使って実行し、そのスクリプトにapi_endpointを引数として渡しています。これにより、Pythonスクリプトから外部のシェルスクリプトを実行し、そのスクリプトに必要なデータを渡すことができました。

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?