BashスクリプトからPythonスクリプトを呼び出して連携する方法とその活用例

他ツール・他言語との連携
スポンサーリンク

シェルスクリプト(Bash)は、UNIX系オペレーティングシステムで広く使用されており、システム管理、スクリプト作成、タスクの自動化において強力なツールです。一方で、Pythonはその簡便さとコードの可読性から多くの開発者に選ばれるプログラミング言語です。そんな二つのスクリプト言語を組み合わせることで、さらに強力な自動化とタスク管理が可能になります。この記事では、BashスクリプトからPythonスクリプトを呼び出す方法とその活用例について解説します。

BashスクリプトからPythonスクリプトを呼び出す方法

基本的な呼び出し方法

BashスクリプトからPythonスクリプトを呼び出す最も基本的な方法は、Bashスクリプト内でPythonスクリプトを直接呼び出すことです。以下はその簡単な例です。

#!/bin/bash
python3 my_script.py

このスクリプトは、python3コマンドを利用して同じディレクトリにあるmy_script.pyを実行します。Pythonスクリプトが実行されると、その結果がコンソールに出力されます。

引数の渡し方

Pythonスクリプトに引数を渡す必要がある場合も簡単です。次の例では、引数として名前を渡しています。

#!/bin/bash
python3 my_script.py "Hello"

Python側では、sys.argvを使用してこれらの引数を受け取ります。

import sys

if len(sys.argv) > 1:
    argument = sys.argv[1]
    print(f"Received argument: {argument}")

標準出力/エラーの取得

BashからPythonスクリプトを実行するとき、標準出力やエラーを処理したくなることがあるでしょう。Bashの出力リダイレクションを活用して処理を行います。

#!/bin/bash
output=$(python3 my_script.py 2>&1)
echo "Python script output: $output"

上記のスクリプトでは、Pythonスクリプトからの出力とエラーをキャプチャし、Bashスクリプトで処理しています。

BashとPythonスクリプトの連携例

CSVデータの加工と分析

例えば、大量のCSVデータを定期的に処理する必要があるとします。Bashでファイルを管理し、Pythonでデータを加工、分析するスクリプトを連携させることで効率化を図ります。

Bashスクリプト部

#!/bin/bash
CSV_FILES=(*.csv)

for file in "${CSV_FILES[@]}"
do
    echo "Processing $file..."
    python3 process_csv.py "$file"
done

Pythonスクリプト部(process_csv.py)

import sys
import pandas as pd

def process_csv(file_path):
    df = pd.read_csv(file_path)
    # ここでデータの加工や分析を行う
    summary = df.describe()
    print(summary)

if __name__ == '__main__':
    if len(sys.argv) > 1:
        process_csv(sys.argv[1])

このスクリプトでは、Bashがディレクトリ内のすべてのCSVファイルを見つけ、それらをPythonスクリプトに渡して処理するだけで作業を完了します。

Webスクレイピングの自動化

Webデータ収集は多くの場面で必要とされるプロセスです。Bashスクリプトでスクレイピングの設定を管理し、Pythonでデータ収集と保存を行うことで、作業を自動化できます。

Bashスクリプト部

#!/bin/bash
URLS=("https://example.com/page1" "https://example.com/page2")

for url in "${URLS[@]}"
do
    echo "Scraping $url..."
    python3 scrape_data.py "$url"
done

Pythonスクリプト部(scrape_data.py)

import sys
import requests
from bs4 import BeautifulSoup

def scrape(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    # ここでページから必要な情報を抽出
    title = soup.find('title').text
    print(f"Title of {url}: {title}")

if __name__ == '__main__':
    if len(sys.argv) > 1:
        scrape(sys.argv[1])

この例では、指定したURLリストから毎回内容をスクレイピングし、Pythonを用いて必要な情報を抽出して表示します。

まとめ

BashスクリプトとPythonスクリプトの連携により、それぞれの言語の利点を活用しつつ、効率的で再利用可能な自動化プロセスを構築できます。Bashのファイル管理能力は、Pythonのデータ処理能力と組み合わせることで、複雑なタスクも手軽に行えるようになります。今後の業務効率化のために、ぜひ活用してみてください。

コメント