Python から subprocess モジュールで外部プログラムを起動する

Python から外部プロセスを起動する場合は subprocess モジュールを使う方法があります。 非同期処理等を考えない、簡単なサンプルをメモしておきます。 subprocess.run() の実行結果はバイト配列なので sys.stdout.buffer.write() を使って標準出力しています。

1
2
3
4
5
6
7
8
#!/usr/bin/env python

import subprocess
import sys

address = '8.8.8.8'
result = subprocess.run('/usr/bin/whois --host whois.iana.org ' + address, shell=True, stdout=subprocess.PIPE)
sys.stdout.buffer.write(result.stdout)

実行結果は以下の通りです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# python sample-whois.py
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

refer:        whois.arin.net

inetnum:      8.0.0.0 - 8.255.255.255
organisation: Administered by ARIN
status:       LEGACY

whois:        whois.arin.net

changed:      1992-12
source:       IANA