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に書き戻されます。
root_dir及びschedule_dirを実行環境のディレクトリのパスをセット。
schedule_fileは外部コマンドに渡す引数の一覧のテキストファイルへのパス
success_fileは外部コマンドが成功した場合、引数がログとして保存されるパス。
error_fileは外部コマンドが失敗した場合、標準出力をテキストファイルとして出力するパス。
また、失敗した引数は再実行を想定してschedule_fileに書き戻されます。
コメント