subprocess

sbuprocessについて

subprocess.run() stdout, stderrの実行結果を変数として渡す

import subprocess

get_ip_addr = subprocess.run(['ip', '-4', 'address'],
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)
cmd_result = get_ip_addr.stdout.decode('utf-8')

subprocess.run() stdout, stderrの実行結果をそのままファイルに書き出す

import subprocess


with open('out.txt', 'w') as f:
    subprocess.run(['ip', '-4', 'address'], stdout=f, stderr=f, encoding='utf-8')

subprocess.run() stdinにファイルからの読み込みを利用する

import subprocess


with open('out.txt', 'r') as fr:
    result = subprocess.run('cat', stdin=fr, encoding='utf-8')

subprocess.run() 結果をファイルに落としてから実行

import subprocess


with open('outfile.txt', 'w') as f:
    rf = subprocess.run(['netsh', 'interface', 'ipv4', 'show', 'address', 'Wi-Fi'],
                    stdout=f, stderr=f, text=True ,encoding='utf-8')

with open('outfile.txt', 'r', encoding='utf-8') as fr:
    outfile = fr.read()

outfile0 = outfile.splitlines()

for line in outfile0:
    line0 = line.split()
    if 'Default' in line0:
        default_gateway = line0[2]

ip_reach = subprocess.run(['ping', default_gateway, '-n', '1'],
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)

if ip_reach.returncode == 0:
    print(f'Default gateway ({default_gateway}) is reachable \n')
else:
    print(f'Default gateway ({default_gateway}) is NOT reachable \n')

subprocess.run() 結果を変数にいれて実行

import subprocess


dfg_addr = subprocess.run(['netsh', 'interface', 'ipv4', 'show', 'address', 'Wi-Fi'],
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
cmd_netsh = dfg_addr.stdout.decode('utf-8')

netsh_result = cmd_netsh.splitlines()

for line in netsh_result:
    line0 = line.split()
    if 'Default' in line0:
        default_gateway = line0[2]

ip_reach = subprocess.run(['ping', default_gateway, '-n', '1'],
                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)

if ip_reach.returncode == 0:
    print(f'Default gateway ({default_gateway}) is reachable \n')
else:
    print(f'Default gateway ({default_gateway}) is NOT reachable \n')