バックグラウンドでコマンドを実行して、そのコマンドの stdout/stderr をファイルに記録する

以下のように複数のコマンドの出力を保存したかった。

  • コマンドを実行してその標準出力と標準エラー出力をファイルに書き出したい
  • 長い時間かかるコマンドがあるので、複数同時に実行したい

例えば、複数のホストに対する ping コマンドの出力とか。

とりあえず、こんな感じ。。。?

import subprocess


def do_pings(ip_addrs, count):
    procs = []
    for ip_addr in ip_addrs:
        p = subprocess.Popen(
            f'ping -c {count} {ip_addr}',
            shell=True,
            text=True,    # this "text" argument is valid since 3.7.
                          # For earlier releases, use
                          # universal_newlines=True, or
                          # encoding='utf-8'.
            stdout=open(f'ping_{ip_addr}_stdout.txt', 'w'),
            stderr=open(f'ping_{ip_addr}_stderr.txt', 'w'),
        )
        procs.append(p)
    [p.wait() for p in procs]

def main():
    IP_ADDRS = ('192.168.0.1', '192.168.0.2')
    PING_COUNT = 30
    do_pings(IP_ADDRS, PING_COUNT)

if __name__ == '__main__':
    main()