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). 6*e5391dc4SMichael WalshSee help text for details. 77d68d00bSMichael Walsh""" 87d68d00bSMichael Walsh 97d68d00bSMichael Walshimport sys 107d68d00bSMichael Walsh 117d68d00bSMichael Walshsave_path_0 = sys.path[0] 127d68d00bSMichael Walshdel sys.path[0] 137d68d00bSMichael Walsh 147d68d00bSMichael Walshfrom gen_arg import * 157d68d00bSMichael Walshfrom gen_print import * 167d68d00bSMichael Walshfrom gen_valid import * 177d68d00bSMichael Walsh 187d68d00bSMichael Walsh# Restore sys.path[0]. 197d68d00bSMichael Walshsys.path.insert(0, save_path_0) 207d68d00bSMichael Walsh 212d8d7f3cSMichael Walsh# Set exit_on_error for gen_valid functions. 222d8d7f3cSMichael Walshset_exit_on_error(True) 232d8d7f3cSMichael Walsh 247d68d00bSMichael Walshparser = argparse.ArgumentParser( 257d68d00bSMichael Walsh usage='%(prog)s [OPTIONS]', 267d68d00bSMichael Walsh description="%(prog)s will...", 27d0741f8aSMichael Walsh formatter_class=argparse.ArgumentDefaultsHelpFormatter, 287d68d00bSMichael Walsh prefix_chars='-+') 297d68d00bSMichael Walsh 307d68d00bSMichael Walshparser.add_argument( 317d68d00bSMichael Walsh '--whatever', 322d8d7f3cSMichael Walsh default='', 337d68d00bSMichael Walsh help='bla, bla.') 347d68d00bSMichael Walsh 3541dda1b0SMichael Walsh# Populate stock_list with options we want. 367d68d00bSMichael Walshstock_list = [("test_mode", 0), ("quiet", 0), ("debug", 0)] 377d68d00bSMichael Walsh 387d68d00bSMichael Walsh 397d68d00bSMichael Walshdef exit_function(signal_number=0, 407d68d00bSMichael Walsh frame=None): 417d68d00bSMichael Walsh r""" 427d68d00bSMichael Walsh Execute whenever the program ends normally or with the signals that we 437d68d00bSMichael Walsh catch (i.e. TERM, INT). 447d68d00bSMichael Walsh """ 457d68d00bSMichael Walsh 467d68d00bSMichael Walsh dprint_executing() 477d68d00bSMichael Walsh dprint_var(signal_number) 487d68d00bSMichael Walsh 497d68d00bSMichael Walsh # Your cleanup code here. 507d68d00bSMichael Walsh 517d68d00bSMichael Walsh qprint_pgm_footer() 527d68d00bSMichael Walsh 537d68d00bSMichael Walsh 547d68d00bSMichael Walshdef signal_handler(signal_number, 557d68d00bSMichael Walsh frame): 567d68d00bSMichael Walsh r""" 577d68d00bSMichael Walsh Handle signals. Without a function to catch a SIGTERM or SIGINT, our 587d68d00bSMichael Walsh program would terminate immediately with return code 143 and without 597d68d00bSMichael Walsh calling our exit_function. 607d68d00bSMichael Walsh """ 617d68d00bSMichael Walsh 627d68d00bSMichael Walsh # Our convention is to set up exit_function with atexit.register() so 637d68d00bSMichael Walsh # there is no need to explicitly call exit_function from here. 647d68d00bSMichael Walsh 657d68d00bSMichael Walsh dprint_executing() 667d68d00bSMichael Walsh 677d68d00bSMichael Walsh # Calling exit prevents us from returning to the code that was running 687d68d00bSMichael Walsh # when we received the signal. 697d68d00bSMichael Walsh exit(0) 707d68d00bSMichael Walsh 717d68d00bSMichael Walsh 727d68d00bSMichael Walshdef validate_parms(): 737d68d00bSMichael Walsh r""" 742d8d7f3cSMichael Walsh Validate program parameters, etc. 757d68d00bSMichael Walsh """ 767d68d00bSMichael Walsh 772d8d7f3cSMichael Walsh # Your validation code here... 782d8d7f3cSMichael Walsh # valid_value(whatever) 797d68d00bSMichael Walsh 807d68d00bSMichael Walsh gen_post_validation(exit_function, signal_handler) 817d68d00bSMichael Walsh 827d68d00bSMichael Walsh 837d68d00bSMichael Walshdef main(): 847d68d00bSMichael Walsh 852d8d7f3cSMichael Walsh gen_get_options(parser, stock_list) 867d68d00bSMichael Walsh 872d8d7f3cSMichael Walsh validate_parms() 887d68d00bSMichael Walsh 897d68d00bSMichael Walsh qprint_pgm_header() 907d68d00bSMichael Walsh 917d68d00bSMichael Walsh # Your code here. 927d68d00bSMichael Walsh 937d68d00bSMichael Walsh 942d8d7f3cSMichael Walshmain() 95