import datetime import os import pickle import subprocess import sys def print_args(args): opts = vars(args) print('======= Options ========') for k, v in sorted(opts.items()): print('{}: {}'.format(k, v)) print('========================') def save_args(args, save_folder, opt_prefix='opt', verbose=True): opts = vars(args) # Create checkpoint folder if not os.path.exists(save_folder): os.makedirs(save_folder, exist_ok=True) # Save options opt_filename = '{}.txt'.format(opt_prefix) opt_path = os.path.join(save_folder, opt_filename) with open(opt_path, 'a') as opt_file: opt_file.write('====== Options ======\n') for k, v in sorted(opts.items()): opt_file.write( '{option}: {value}\n'.format(option=str(k), value=str(v))) opt_file.write('=====================\n') opt_file.write('launched {} at {}\n'.format( str(sys.argv[0]), str(datetime.datetime.now()))) # Add git info label = subprocess.check_output(["git", "describe", "--always"]).strip() if subprocess.call( ["git", "branch"], stderr=subprocess.STDOUT, stdout=open(os.devnull, 'w')) == 0: opt_file.write('=== Git info ====\n') opt_file.write('{}\n'.format(label)) commit = subprocess.check_output(['git', 'rev-parse', 'HEAD']) opt_file.write('commit : {}\n'.format(commit.strip())) opt_picklename = '{}.pkl'.format(opt_prefix) opt_picklepath = os.path.join(save_folder, opt_picklename) with open(opt_picklepath, 'wb') as opt_file: pickle.dump(opts, opt_file) if verbose: print('Saved options to {}'.format(opt_path))