見出し画像

【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事業部では、データアナリスト・データエンジニアを募集しています。
是非こちらもご覧ください。

▽その他募集職種こちらから▽

●●●

●●●

✉ サービスに関するお問い合わせ
パーソルプロセス&テクノロジー SMKT事業部
smkt_markegr_note@persol-pt.co.jp