バックグラウンドでコマンドを実行して、そのコマンドの 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()