【Python】別のPythonファイルに複数の変数を渡して実行する方法
みなさん、こんにちは!
SMKT事業部noteをお読みいただきありがとうございます。
今回の記事は、ライター今田が担当します。
日ごろはGoogle BigQueryでデータ抽出や、Tableauを活用したデータ分析・ビジュアライズ作成などをしています。
ローデータ作成の自動化に取り組んでいたときに、定期実行用のPythonファイルとデータ作成用のPythonファイルに分ける必要がありまして、
・Pythonから別のPythonファイルを実行する方法
・元ファイルから複数の変数を受け取り、別ファイルでその変数を使用する方法
について調べたので、今回使用した関数などを記事にまとめてみました。
よかったら最後までお読みいただけると嬉しいです!
1.Pythonから別のPythonファイルを実行する方法
まずは、別ファイルに渡す変数を定義します。
#変数の設定
val1 = "test1"
val2 = "test2"
別のPythonファイルを実行するには、subprocessモジュールを使います。
公式のドキュメントは下記ご参照ください。
subprocessモジュールを使うことで、コマンドでファイルを実行する時と同じようなことがPythonからもできます。
■使用例:
#変数は半角スペースでつなぐ
stdin = "{val1} {val2}".format(val1=val1,val2=val2)
#変数を渡して別ファイルを実行
ret = subprocess.run(["python","filename.py"], input=stdin, capture_output=True, text=True)
■補足(公式ドキュメントより引用、抜粋):
サブプロセスを起動するために推奨される方法は、すべての用法を扱える run() 関数を使用することです。
subprocess.run(
args, *,
stdin=None,
input=None,
stdout=None,
stderr=None,
capture_output=False,
shell=False,
cwd=None,
timeout=None,
check=False,
encoding=None,
errors=None,
text=None,
env=None,
universal_newlines=None,
**other_popen_kwargs
)
・args で指定されたコマンドを実行します。
・input はサブプロセスの標準入力に渡されます。
・capture_output を true に設定すると、stdout および stderr が捕捉されます。
・textが true である場合、stdin, stdout および stderr のためのファイルオブジェクトはテキストモードでオープンされます。
2. 元ファイルから複数の変数を受け取り、別ファイルでその変数を使用する方法
先ほどの入力を受け取り、変数に設定します。
一例としまして、
input関数で別ファイルにて設定した変数を入力し、
split関数で半角スペースにて区切ったリスト型を返し、
map関数でリストのそれぞれの値を文字列に変換します。
■使用例:
#別ファイルの変数を入力し文字列に変換
val1,val2 = map(str, input().split())
■参考
・input関数(公式ドキュメント)
・split関数(公式ドキュメント)
・map関数(公式ドキュメント)
余談ですが、map関数で今回は文字列に変換するため第一引数にstrを用いましたが、lambda式(ラムダ式、無名関数)も使えます。
自由度が高い関数で、うまく使いこなせるようになりたいなと個人的には思っています。
3.最後に
今回は、ワークフローをPythonで実装する際に使いそうな関数を記事にしてみました。
今後も日ごろの業務で得た便利な方法を、こちらのnoteで発信していきたいと思います!
最後までご覧いただきありがとうございました。
ではまた。
●●●
SMKT事業部では、データアナリスト・データエンジニアを募集しています。
是非こちらもご覧ください。
▽その他募集職種こちらから▽
●●●
●●●