注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

FlaskでPython外部ファイルを呼び出し、関数・クラス内のプログラムを実行する方法

  • 2021年5月21日
  • 2021年6月24日
  • Python

ここではWebアプリケーション開発の軽量フレームワークである「Flask」を使って、外部のPythonファイルを呼び出し、実行する方法を紹介します。

 

この記事を読むことで

Pythonファイルを階層別のインポートする方法

関数化された外部Pythonファイルを実行する方法

クラス化された外部Pythonファイルを実行する方法

フォルダ内の外部Pythonファイルを実行する方法

を知ることができます。

 

外部のPythonファイルを実行する方法を知っていると、FlaskアプリケーションをロボットなどのGUIコントローラーとして使用することができるので、この機会に是非挑戦してみてください。

 

Flaskから外部のPythonファイルを実行できると、下記動画の後半より紹介されているロボットコントローラーとして使用することができます。↓↓

 

それでは早速始めていきましょう。

 

同一階層下の関数化された外部Pythonファイルを実行

 

関数化されたPythonファイルをインポート

それでは始めに、同一階層下の関数化された外部のPythonファイルをインポートしていきます。

ディレクトリツリーは下記の通りです。

📂 static

── style.css

📂 templates

── ※※.html

app.py

robot_control.py (関数化されたPythonファイル)

 

関数化されたPythonファイルは

import ファイル名

とPythonファイル名を記述してインポートします。

 

Flaskで関数を呼び出す

app.pyで関数化されたPythonファイルをインポートしたら、@app.routeのreturnに実行する関数名を定義します。

 

呼び出すには

return redirect(‘/’), ファイル名.ファイル内の関数名

と記述することで、リダイレクトと同時にファイル内の指定した関数を実行することができます。

 

app.py:関数を呼び出すサンプルプログラム

from flask import Flask, render_template,  request, url_for, session , redirect
from flask.views import MethodView

import robot_control # 関数化されたPythonファイルをインポート

・・・・・・・・

@app.route('/ robotmotion')
def move_motion():
    # robot_controlからstandup()関数を実行
    return redirect('/'), robot_control.standup()  

・・・・・・・・

 

上記のサンプルでは、robot_control.pyからstandup()関数を呼び出し・実行しています。

 

同一階層下のクラス化された外部Pythonファイルを実行

 

クラス化されたPythonファイルをインポート

続いて、同一階層下のクラス化された外部のPythonファイルをインポートしていきます。

ディレクトリツリーは下記の通りです。

📂 static

── style.css

📂 templates

── ※※.html

app.py

sensor_control.py (クラス化されたPythonファイル)

 

クラス化されたPythonファイルは

from ファイル名 import クラス名

とファイル名、クラス名の2つを記述してインポートします。

 

Flaskでクラスを呼び出す

app.pyでクラス化されたPythonファイルをインポートしたら、@app.routeの関数内にクラスの宣言と関数の呼び出しを行います。

 

呼び出すには

@app.route(‘/’)

def 任意の関数名():

A(任意の変数名) = クラス名

return redirect(‘/’), A(任意の変数名).クラス内の関数名

と記述することで、クラスの呼び出し、クラス内の関数を呼び出すことができます。

 

app.py:クラスを呼び出すサンプルプログラム

from flask import Flask, render_template,  request, url_for, session , redirect
from flask.views import MethodView

from sensor_control import BmxData  # クラスのインポート

・・・・・・・・

@app.route('/gyrocontrol')
def gyro_control():
    gyro = BmxData()  # クラスを定義
    return redirect('/'), gyro.main()  # クラス内からmain()関数を呼び出す

・・・・・・・・

 

上記のサンプルでは、sensor_control.pyからインポートしたBmxDataというクラスをgyroという名前で再定義し、このクラスからmain()関数を呼び出し・実行しています。

 

フォルダ内の外部Pythonファイルを実行する方法を紹介する前にお知らせです。

PythonとFlaskを使ってWebアプリケーション開発を学びたい方は「Udemy」のこちらのコースがオススメです。

Webデザイン、アプリの開発やPythonのスキルアップを目指したい方は是非上記リンクからのぞいてみてください。

 

フォルダ内の外部Pythonファイルを実行

 

フォルダ内からPythonファイルをインポート

最後に、フォルダ内からクラス化された外部のPythonファイルをインポートしていきます。

ディレクトリツリーは下記の通りです。

📂 static

── style.css

📂 templates

── ※※.html

📂pytorch_yolov3

── camera_control.py  # フォルダ内のPythonファイル

app.py

 

フォルダ内に格納されているPythonファイルは

from 対象のファイル名.実行するpyファイル import pyファイル内のクラス名

と記述してインポートします。

 

フォルダ内のPythonファイルからクラスを呼び出す

app.pyでフォルダ内からPythonファイルをインポートしたら、@app.routeの関数内にクラスの宣言と関数の呼び出しを行います。

こちらは、先ほどのクラス化されたPythonファイルの呼び出し・実行と同じ手順になるので、上記を参考にしてください。

 

app.py:クラスを呼び出すサンプルプログラム

from flask import Flask, render_template,  request, url_for, session , redirect
from flask.views import MethodView

from pytorch_yolov3.camera_control import CameraControl

・・・・・・・・

@app.route('/cameracontrol')
def camera_control():
    cam = CameraControl()
    return redirect('/'), cam.pi_camera()

・・・・・・・・

 

上記のサンプルでは、pytorch_yolov3フォルダ内のcamera_control.pyからCameraControlというクラスを呼び出し、camという名前で再定義しています。

return文では、このクラスからpi_camera()関数を呼び出し、実行しています。

 

 

以上、FlaskでPython外部ファイルを呼び出し・実行する方法でした。

記述方法だけ知っていれば、さほど難しい内容ではないと思います。

 

この記事が皆様の

お疲れ様でした。

 

flask_pythoncall_thubnail
学びに関する情報をチェック!