Pythonでは、他のプログラムやシステムコマンドを実行することができます。
本記事では、subprocessを用いた子プロセスの管理を紹介します。
やすひら
子プロセス管理を紹介します
この記事でわかること
- 子プロセスの管理方法
- 子プロセスの実行方法
目次
子プロセスの実行
子プロセスを実行する方法を紹介します。
ソースコード
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
コマンド実行例
$ python3 -B python-subprocess-run.py
total 4
-rw-rw-r-- 1 user user 111 Oct 2 14:22 python-subprocess-run.py
子プロセスの非同期実行
非同期で子プロセスを実行する方法を紹介します。
ソースコード
import subprocess
process = subprocess.Popen(['sleep', '5'])
print("子プロセスを実行中...")
process.wait() # プロセスが終了するまで待機
print("子プロセスが終了しました")
コマンド実行例
$ python3 -B python-subprocess-popen.py
子プロセスを実行中...
子プロセスが終了しました
標準入力/標準出力のリダイレクト
プロセスの標準入力/標準出力をリダイレクトして、子プロセスにデータを渡すことができます。
ソースコード
import subprocess
process = subprocess.Popen(['grep', 'python'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
output, _ = process.communicate(input='python\njava\n')
print(output)
コマンド実行例
$ python3 -B python-subprocess-popen-redirect.py
python
子プロセスの実行(タイムアウトあり)
タイムアウトありで子プロセスを実行することができます。
ソースコード
import subprocess
try:
result = subprocess.run(['sleep', '10'], timeout=5)
except subprocess.TimeoutExpired:
print("タイムアウトが発生しました")
コマンド実行例
$ python3 -B python-subprocess-run-timeout.py
タイムアウトが発生しました
まとめ
Pythonの子プロセス管理について紹介しました。
Pythonの子プロセスは
- subprocessで管理できる
- 外部プロセスを実行できる
- 非同期で実行できる
- リダイレクトできる
- タイムアウト指定で実行できる
子プロセス管理は、主にLinuxコマンド等の外部プロセスを実行する際に利用します。
Pythonから外部プロセスを実行できれば、実行可能な機能範囲が増えるので、ぜひ利用したい機能の1つです。