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 207d68d00bSMichael Walshparser = argparse.ArgumentParser( 217d68d00bSMichael Walsh usage='%(prog)s [OPTIONS]', 227d68d00bSMichael Walsh description="%(prog)s will...", 237d68d00bSMichael Walsh formatter_class=argparse.RawTextHelpFormatter, 247d68d00bSMichael Walsh prefix_chars='-+') 257d68d00bSMichael Walsh 267d68d00bSMichael Walshparser.add_argument( 277d68d00bSMichael Walsh '--whatever', 287d68d00bSMichael Walsh help='bla, bla.') 297d68d00bSMichael Walsh 30*41dda1b0SMichael Walsh# Populate stock_list with options we want. 317d68d00bSMichael Walshstock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)] 327d68d00bSMichael Walsh 337d68d00bSMichael Walsh 347d68d00bSMichael Walshdef exit_function(signal_number=0, 357d68d00bSMichael Walsh frame=None): 367d68d00bSMichael Walsh 377d68d00bSMichael Walsh r""" 387d68d00bSMichael Walsh Execute whenever the program ends normally or with the signals that we 397d68d00bSMichael Walsh catch (i.e. TERM, INT). 407d68d00bSMichael Walsh """ 417d68d00bSMichael Walsh 427d68d00bSMichael Walsh dprint_executing() 437d68d00bSMichael Walsh dprint_var(signal_number) 447d68d00bSMichael Walsh 457d68d00bSMichael Walsh # Your cleanup code here. 467d68d00bSMichael Walsh 477d68d00bSMichael Walsh qprint_pgm_footer() 487d68d00bSMichael Walsh 497d68d00bSMichael Walsh 507d68d00bSMichael Walshdef signal_handler(signal_number, 517d68d00bSMichael Walsh frame): 527d68d00bSMichael Walsh 537d68d00bSMichael Walsh r""" 547d68d00bSMichael Walsh Handle signals. Without a function to catch a SIGTERM or SIGINT, our 557d68d00bSMichael Walsh program would terminate immediately with return code 143 and without 567d68d00bSMichael Walsh calling our exit_function. 577d68d00bSMichael Walsh """ 587d68d00bSMichael Walsh 597d68d00bSMichael Walsh # Our convention is to set up exit_function with atexit.register() so 607d68d00bSMichael Walsh # there is no need to explicitly call exit_function from here. 617d68d00bSMichael Walsh 627d68d00bSMichael Walsh dprint_executing() 637d68d00bSMichael Walsh 647d68d00bSMichael Walsh # Calling exit prevents us from returning to the code that was running 657d68d00bSMichael Walsh # when we received the signal. 667d68d00bSMichael Walsh exit(0) 677d68d00bSMichael Walsh 687d68d00bSMichael Walsh 697d68d00bSMichael Walshdef validate_parms(): 707d68d00bSMichael Walsh 717d68d00bSMichael Walsh r""" 727d68d00bSMichael Walsh Validate program parameters, etc. Return True or False (i.e. pass/fail) 737d68d00bSMichael Walsh accordingly. 747d68d00bSMichael Walsh """ 757d68d00bSMichael Walsh 767d68d00bSMichael Walsh # Your validation code here. 777d68d00bSMichael Walsh 787d68d00bSMichael Walsh gen_post_validation(exit_function, signal_handler) 797d68d00bSMichael Walsh 807d68d00bSMichael Walsh return True 817d68d00bSMichael Walsh 827d68d00bSMichael Walsh 837d68d00bSMichael Walshdef main(): 847d68d00bSMichael Walsh 857d68d00bSMichael Walsh if not gen_get_options(parser, stock_list): 867d68d00bSMichael Walsh return False 877d68d00bSMichael Walsh 887d68d00bSMichael Walsh if not validate_parms(): 897d68d00bSMichael Walsh return False 907d68d00bSMichael Walsh 917d68d00bSMichael Walsh qprint_pgm_header() 927d68d00bSMichael Walsh 937d68d00bSMichael Walsh # Your code here. 947d68d00bSMichael Walsh 957d68d00bSMichael Walsh return True 967d68d00bSMichael Walsh 977d68d00bSMichael Walsh 987d68d00bSMichael Walsh# Main 997d68d00bSMichael Walsh 1007d68d00bSMichael Walshif not main(): 1017d68d00bSMichael Walsh exit(1) 102