Pythonで以下のようにifconfigコマンドを実行し、結果を取得したい。
(subprocess.runはPython3.5で追加)
import subprocess
command = "ifconfig"
p = subprocess.run(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
print(p.stdout.decode("utf-8", "ignore"))
実行結果
eth0 Link encap:イーサネット ハードウェアアドレス 00:0c:9f:aa:bb:cc
inetアドレス:192.168.5.22 ブロードキャスト:192.168.5.255 マスク:255.2
55.255.0
inet6アドレス: fe80::63b7:c654:77c9:b843/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:29114 エラー:0 損失:5944 オーバラン:0 フレーム:0
TXパケット:6015 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:1945895 (1.8 MiB) TXバイト:856735 (836.6 KiB)
lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:65536 メトリック:1
RXパケット:192 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:192 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1
RXバイト:32042 (31.2 KiB) TXバイト:32042 (31.2 KiB)
wlan0 Link encap:イーサネット ハードウェアアドレス 00:0c:9f:aa:bb:cd
UP BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)
日本語で出力されると非常に処理しづらいので、英語で出力してほしい。
以下のようにenv引数を指定してやると良い。
import subprocess
command = "ifconfig"
_env = {'LANG':'C'}
p = subprocess.run(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=_env,
shell=True
)
print(p.stdout.decode("ascii"))
実行結果
eth0 Link encap:Ethernet HWaddr 00:0c:9f:aa:bb:cc
inet addr:192.168.5.22 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::63b7:c654:77c9:b843/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:29928 errors:0 dropped:6055 overruns:0 frame:0
TX packets:6137 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2006983 (1.9 MiB) TX bytes:874819 (854.3 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:192 errors:0 dropped:0 overruns:0 frame:0
TX packets:192 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:32042 (31.2 KiB) TX bytes:32042 (31.2 KiB)
wlan0 Link encap:Ethernet HWaddr 00:0c:9f:aa:bb:cd
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)