Pythonのsubprocessモジュールの使い方を解説していく

スポンサーリンク

読者の今回は、Pythonのサブプロセスモジュールに焦点を当てて、詳しく説明します。

では、さっそく始めましょう


スポンサーリンク

Pythonのsubprocessモジュールとは何ですか?

サブプロセスモジュールの機能を理解する前に、次のような状況を考えてみましょう。

通常、私たちはある処理を自動化したり、UIフォームやデータ関連フォームから手動で操作することなく結果を得るためにPythonでコードを記述しています。

このとき、「Pythonのサブプロセスモジュール」が登場します。

サブプロセスモジュールを使うと、Pythonのコードの中でシステムレベルのスクリプトを処理することができます

サブプロセスモジュールは、システムプロセスの入力、出力、エラーパイプライン、コードとの接続を形成することができます

サブプロセスモジュールは、Python環境内でシステムレベルのスクリプトを実行するための様々なメソッドを内在しています。

  1. subprocess.call()メソッド
  2. subprocess.run()
  3. subprocess.check_output()
  4. subprocess.Popen()関数とcommunication()関数

では、一つずつ見ていきましょう。


1. subprocess.call() 関数

subprocess モジュールに関連する関数を使用するためには、Python 環境にモジュールをインポートする必要があります。

subprocess.call()関数は引数で指定されたコマンドを実行し、実行に成功したかどうかの値を返す関数です。

以下の構文を見てください。

subprocess.call(arguments, shell=True)

例01:

以下の例では、Pythonスクリプトで「echo Hello world」を実行しようとしています。

この場合、call()関数では、最初の引数(echo)が実行コマンド、それ以降の引数がコマンドライン引数として扱われます。

さらに、引数を文字列として扱うために、shell = True を指定する必要があります。

Falseに設定すると、引数はパスまたはファイルパスとして扱われます。

import subprocess
print(subprocess.call(["echo" , "Hello world"],shell=True))

出力です。

以下のように、リターンコードとして0が返されます。

それ以外の値が返された場合は、コマンドの実行が成功しなかったことを意味します。

"Hello world"
0

例02:

この例では、python スクリプトを通してコマンド “ls -l” を実行しました。

import subprocess
subprocess.call(["ls","-l"],shell=True)

結果は、以下の通りです。

-rw-r--r-- 1 smulani 1049033 Feb 27 10:40 check.py

2. subprocess.run()コマンド

上で見たように、call()関数は実行されたコマンドのリターンコードを返すだけです。

入力パラメータやチェックパラメータを確認するためのものではありません。

同じように、subprocess.run() 関数は python コード内で bash またはシステムスクリプトを実行し、コマンドのリターンコードを返すのに役立ちます。

さらに、この関数に渡された引数も返します。

これによって、システムスクリプトへの入力を確認することができます

例えば、以下の様になります。

import subprocess
print(subprocess.run(["echo","Hello World"],shell=True))

出力。

"Hello World"
CompletedProcess(args=['echo', 'Hello World'], returncode=0)

3. subprocess.Popen() 関数

subprocess.Popen()` 関数は、子プログラムを内部で全く新しいプロセスとして実行できるようにします。

また、pythonの中でシェルコマンドを実行する場合にも利用できます。

構文は以下の通りです。

subprocess.Popen(arguments, stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
  • stdout: コマンドの出力値
  • stderr: コマンドから返されたエラー

Pythonのstdin, stdout, stderrを読むことをお勧めします。

例えば、以下の様になります。

import subprocess
process = subprocess.Popen(
    ['echo', 'Hello World'],shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
print(stdout)

ここでは、communicate()関数も使用しています。

この関数は、上記のようにプロセスから実行されたスクリプトの入力、出力、エラーの値を直接読み込んで取得するのに役立ちます。

結果は以下の通りです。

b'"Hello World"
'

まとめ

ここまでで、このトピックは終了です。

何か質問があれば、お気軽にコメントください。

Pythonに関連するこのような投稿をもっと見るには、私たちにご期待ください。

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