【FastAPI】シェルの実行結果を取得する方法


この記事はプロモーションを含みます。

API

FastAPIとUvicornで構築したWebサーバー経由で、シェルを実行し、その実行結果を取得する方法を解説します。

はじめに

先日、GETメソッドの実行時にbashシェルスクリプトを実行する方法を説明しました。
今回は、実行したbashシェルスクリプトの実行結果を取得する方法を説明します。

シェルを実行する方法は以下で解説しています。

APIサーバーの構築方法から知りたい方は、以下を参考にして下さい。

実行するシェル

GETメソッドの実行時に呼び出されるシェルです。
「シェル実行」を出力するだけの簡単なシェルで、シェル名は「test.sh」とします。

#!/bin/bash

echo "シェル実行"

API向けスクリプト

GETメソッドが呼び出された際に、シェルを実行するスクリプトです。

subprocessモジュールのcapture_outputをTrueに設定することで、stdoutやstderrを補足することが出来ます。

from fastapi import FastAPI
import subprocess

app = FastAPI()

@app.get("/")
async def exec():
    result = subprocess.run(["bash", "/home/work/test.sh"], capture_output=True)
    return {"text": result.stdout}

実行結果

GETメソッドの実行と実行結果を確認します。

curlコマンドでGETメソッドを実行します。
シェルの実行結果である文字列「シェル実行」を取得することが出来ました。

[root@localhost work]# curl http://127.0.0.1:8000/
{"text":"シェル実行\n"}[root@localhost work]#

コメント

タイトルとURLをコピーしました