Pythonでテキストファイルを引数として外部コマンドを連続処理するスクリプト

python コンピュータ
python
wgetなどの外部コマンドで複数のファイルをダウンロードする場合を想定して作成したバッチスクリプトです。

スクリプト

#!/usr/bin/env python3

import os
import subprocess
from pathlib import Path

if __name__ == '__main__':
    target_command = '外部コマンド'
    root_dir = '.'
    schedule_dir = root_dir + '/' + 'schedule'
    schedule_file = schedule_dir + '/' + target_command + ".txt"
    success_file = schedule_dir + '/' + target_command + ".log"
    error_file = schedule_dir + '/' + target_command + ".err"

    if (not(os.path.isdir(schedule_dir))):
        Path(schedule_dir).mkdir()
    
    if (not(os.path.isfile(schedule_file))):
        Path(schedule_file).touch()

    with open(schedule_file,'r',encoding="utf-8") as f:
        content = f.read()
    
    items = content.split('\n')

    success = []
    errors = []
    for item in items:
        if item == '':
            continue
        cmd = [target_command, item]
        proc = subprocess.run(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)
        if (proc.returncode == 0):
            success.append(item)
        else:
            print(proc.returncode)
            errors.append(item)
            with open(error_file, "a", encoding="utf-8") as f:
                f.write(proc.stdout)
    
    if (len(success)>0):
        s = "\n".join(success)
        with open(success_file, "a", encoding="utf-8") as f:
            f.write(s)
    
    e = "\n".join(errors)
    with open(schedule_file, "w", encoding="utf-8") as f:
        f.write(e)    

説明

target_commandに外部コマンドの名称(拡張子除く)をセット。
root_dir及びschedule_dirを実行環境のディレクトリのパスをセット。
schedule_fileは外部コマンドに渡す引数の一覧のテキストファイルへのパス
success_fileは外部コマンドが成功した場合、引数がログとして保存されるパス。
error_fileは外部コマンドが失敗した場合、標準出力をテキストファイルとして出力するパス。
また、失敗した引数は再実行を想定してschedule_fileに書き戻されます。

コメント