ホームページ  >  記事  >  バックエンド開発  >  サブプロセスを使用して Python スクリプトを実行し、入力を渡し、出力をキャプチャするにはどうすればよいですか?

サブプロセスを使用して Python スクリプトを実行し、入力を渡し、出力をキャプチャするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 18:43:33720ブラウズ

How Can I Use Subprocess to Execute Python Scripts, Pass Input, and Capture Output?

サブプロセスを利用して入力で Python スクリプトを実行し、出力をキャプチャする

サブプロセス モジュールを使用して別のスクリプトから Python スクリプトを呼び出すタスクを実行する場合、入力を渡して変数に目的の出力を取得するというハードルに直面するかもしれません。この記事では、これらの課題に対する解決策を詳しく掘り下げ、サブプロセスの力を効果的に活用できるようにします。

準備を整えるために、2 つの Python スクリプト a.py と b.py があるシナリオを考えてみましょう。スクリプト a.py は、ユーザーに特定のクエリを要求し、JSON 形式の出力を生成します。 B.py は、a.py を呼び出し、必要な入力を提供し、出力をキャプチャすることを目的としています。

これを達成するための鍵は、subprocess モジュールの check_output メソッドを活用することにあります。このメソッドは、Python 実行可能ファイルと a.py へのパスで構成されるコマンド リストを入力として受け取ります。指定された入力 (この場合、一連のクエリ) を a.py に入力し、その stdout 出力を文字列としてキャプチャします。

このアプローチを示すコード スニペットの例を次に示します。

<code class="python">import os
import sys
from subprocess import check_output

script_path = os.path.join(get_script_dir(), 'a.py')
output = check_output([sys.executable, script_path],
                      input='\n'.join(['query 1', 'query 2']),
                      universal_newlines=True)</code>

あるいは、モジュール a を b.py からインポートし、a.py 内の関数を呼び出すことで、より柔軟なアプローチを選択することもできます。ただし、インポート時に不要なコードの実行を防ぐために、a.py が if __name__=="__main__" ガードを採用していることを確認することが重要です。

パフォーマンスの最適化が主な関心事である場合は、マルチプロセッシングを利用してファイルを分散することを検討してください。複数のプロセスにわたるクエリ。このアプローチは、実行時間を短縮できる可能性があるため、クエリ処理が CPU を集中的に使用する場合に特に有益です。

次のコード スニペットは、これを実現する方法を示しています。

<code class="python">from multiprocessing import freeze_support, Pool
import a

if __name__ == "__main__":
   freeze_support()
   pool = Pool() # use all available CPUs
   result = pool.map(a.search, ['query 1', 'query 2'])</code>

これらの手法をマスターすることで、を使用すると、入力を使用して Python スクリプトをシームレスに実行し、その出力をキャプチャし、スクリプト作成のニーズに合わせてサブプロセスの力を活用するための十分な準備が整います。

以上がサブプロセスを使用して Python スクリプトを実行し、入力を渡し、出力をキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。