シェルスクリプト(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のデータ処理能力と組み合わせることで、複雑なタスクも手軽に行えるようになります。今後の業務効率化のために、ぜひ活用してみてください。
コメント