17d68d00bSMichael Walsh#!/usr/bin/env python 27d68d00bSMichael Walsh 37d68d00bSMichael Walshr""" 47d68d00bSMichael Walshpython_pgm_template: Copy this template as a base to get a start on a python 57d68d00bSMichael Walshprogram. You may remove any generic comments (like this one). 67d68d00bSMichael Walsh""" 77d68d00bSMichael Walsh 87d68d00bSMichael Walshimport sys 97d68d00bSMichael Walsh 107d68d00bSMichael Walshsave_path_0 = sys.path[0] 117d68d00bSMichael Walshdel sys.path[0] 127d68d00bSMichael Walsh 137d68d00bSMichael Walshfrom gen_arg import * 147d68d00bSMichael Walshfrom gen_print import * 157d68d00bSMichael Walshfrom gen_valid import * 167d68d00bSMichael Walsh 177d68d00bSMichael Walsh# Restore sys.path[0]. 187d68d00bSMichael Walshsys.path.insert(0, save_path_0) 197d68d00bSMichael Walsh 20*2d8d7f3cSMichael Walsh# Set exit_on_error for gen_valid functions. 21*2d8d7f3cSMichael Walshset_exit_on_error(True) 22*2d8d7f3cSMichael Walsh 237d68d00bSMichael Walshparser = argparse.ArgumentParser( 247d68d00bSMichael Walsh usage='%(prog)s [OPTIONS]', 257d68d00bSMichael Walsh description="%(prog)s will...", 26d0741f8aSMichael Walsh formatter_class=argparse.ArgumentDefaultsHelpFormatter, 277d68d00bSMichael Walsh prefix_chars='-+') 287d68d00bSMichael Walsh 297d68d00bSMichael Walshparser.add_argument( 307d68d00bSMichael Walsh '--whatever', 31*2d8d7f3cSMichael Walsh default='', 327d68d00bSMichael Walsh help='bla, bla.') 337d68d00bSMichael Walsh 3441dda1b0SMichael Walsh# Populate stock_list with options we want. 357d68d00bSMichael Walshstock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)] 367d68d00bSMichael Walsh 377d68d00bSMichael Walsh 387d68d00bSMichael Walshdef exit_function(signal_number=0, 397d68d00bSMichael Walsh frame=None): 407d68d00bSMichael Walsh r""" 417d68d00bSMichael Walsh Execute whenever the program ends normally or with the signals that we 427d68d00bSMichael Walsh catch (i.e. TERM, INT). 437d68d00bSMichael Walsh """ 447d68d00bSMichael Walsh 457d68d00bSMichael Walsh dprint_executing() 467d68d00bSMichael Walsh dprint_var(signal_number) 477d68d00bSMichael Walsh 487d68d00bSMichael Walsh # Your cleanup code here. 497d68d00bSMichael Walsh 507d68d00bSMichael Walsh qprint_pgm_footer() 517d68d00bSMichael Walsh 527d68d00bSMichael Walsh 537d68d00bSMichael Walshdef signal_handler(signal_number, 547d68d00bSMichael Walsh frame): 557d68d00bSMichael Walsh r""" 567d68d00bSMichael Walsh Handle signals. Without a function to catch a SIGTERM or SIGINT, our 577d68d00bSMichael Walsh program would terminate immediately with return code 143 and without 587d68d00bSMichael Walsh calling our exit_function. 597d68d00bSMichael Walsh """ 607d68d00bSMichael Walsh 617d68d00bSMichael Walsh # Our convention is to set up exit_function with atexit.register() so 627d68d00bSMichael Walsh # there is no need to explicitly call exit_function from here. 637d68d00bSMichael Walsh 647d68d00bSMichael Walsh dprint_executing() 657d68d00bSMichael Walsh 667d68d00bSMichael Walsh # Calling exit prevents us from returning to the code that was running 677d68d00bSMichael Walsh # when we received the signal. 687d68d00bSMichael Walsh exit(0) 697d68d00bSMichael Walsh 707d68d00bSMichael Walsh 717d68d00bSMichael Walshdef validate_parms(): 727d68d00bSMichael Walsh r""" 73*2d8d7f3cSMichael Walsh Validate program parameters, etc. 747d68d00bSMichael Walsh """ 757d68d00bSMichael Walsh 76*2d8d7f3cSMichael Walsh # Your validation code here... 77*2d8d7f3cSMichael Walsh # valid_value(whatever) 787d68d00bSMichael Walsh 797d68d00bSMichael Walsh gen_post_validation(exit_function, signal_handler) 807d68d00bSMichael Walsh 817d68d00bSMichael Walsh 827d68d00bSMichael Walshdef main(): 837d68d00bSMichael Walsh 84*2d8d7f3cSMichael Walsh gen_get_options(parser, stock_list) 857d68d00bSMichael Walsh 86*2d8d7f3cSMichael Walsh validate_parms() 877d68d00bSMichael Walsh 887d68d00bSMichael Walsh qprint_pgm_header() 897d68d00bSMichael Walsh 907d68d00bSMichael Walsh # Your code here. 917d68d00bSMichael Walsh 927d68d00bSMichael Walsh 93*2d8d7f3cSMichael Walshmain() 94