Passing parameters at the command line (New Python User)

Steven Bethard steven.bethard at gmail.com
Mon Sep 24 21:09:43 CEST 2007


cjt22 at bath.ac.uk wrote:
> Hi there. I just wondered whether anyone could recommend the correct
> way I should be passing command line parameters into my program. I am
> currently using the following code:
> 
> def main(argv = None):
> 
> 
>     file1=  "directory1"
>     file2 =  "directory2"
> 
> 
>     if argv is None:
>         args = sys.argv[1:]
> 
>     if len(args) == 0:
>         Initialise.init(0)
>         Process.processCon(file1, 0)
>         Output.print()
> 
>     for i in range(len(args)):
>         if args[i] == "-no":
>             Initialise.init(0)
>             Process.processCon(file2,1)
>             Output.print()
> 
>         if args[i] == "-not":
>            Initialise.init(1)
>             Process1.process(stepStore, firstSteps)
>             Output.print1()
> 
> 
> 
> if __name__ == "__main__":
>     main()
> 
> 
> Have I used bad syntax here so that a user can either run the program
> with commands:
> main.py
> main.py -no
> main.py -not
> 
> If I also wanted an option file to be passed in at the command line
> for 'main.py' and 'main.py -no' what would be the best way to go about
> this? I have never used Python to pass in arguments at the command
> line so any help would be much appreciated.

A solution using argparse (http://argparse.python-hosting.com/):

     import argparse

     def main(no=False, nott=False):
         file1 = "directory1"
         file2 = "directory2"

         if nott:
             print 'Initialise.init(1)'
             print 'Process1.process(stepStore, firstSteps)'
             print 'Output.print1()'
         else:
             print 'Initialise.init(0)'
             if no:
                 print 'Process.processCon(file2, 1)'
             else:
                 print 'Process.processCon(file1, 0)'
             print 'Output.print()'

     if __name__ == "__main__":
         parser = argparse.ArgumentParser()
         parser.add_argument('-no', action='store_true')
         parser.add_argument('-not', action='store_true', dest='nott')
         args = parser.parse_args()
         main(no=args.no, nott=args.nott)

Note that I've used print statements since I don't have your Initialize, 
Process, etc. objects. If I knew what "-no" and "-not" meant better, I 
could give you a better suggestion, e.g. where you parse the 0 or 1 
value for Initialize.init directly from the command line.

STeVe



More information about the Python-list mailing list