Search code examples
pythonargumentscommand-line-argumentsargparseoptparse

Most pythonic way of accepting arguments using optparse


I currently have a python file that utilizes sys.argv[1] to accept a string at the command line. It then performs operations on that string and then returns the modified string to the command line.

I would like to implement a batch mode option in which I can provide a file of strings (one per line, fwiw) and have it return to the command line so that I can redirect the output doing something like

$ python script.py -someflag file.txt > modified.txt 

while still retaining the current capabilities.

I am only running 2.6, so argparse is not an option. The tutorials I have seen either use argparse, getopt, or delve into examples that are too complex/don't apply.

What is the best way to check the input and act appropriately?


Solution

  • argparse is still an option, it's just not built into 2.6. You can still install it like any 3rd party package (for example, using easy_install argparse).

    An example of code for this would be:

    import sys
    import argparse
    
    p = argparse.ArgumentParser(description="script.py")
    p.add_argument("-s", dest="string")
    p.add_argument("-f", dest="infile")
    
    args = p.parse_args()
    
    if args.infile == None and args.string == None:
        print "Must be given either a string or a file"
        sys.exit(1)
    if args.infile != None and args.string != None:
        print "Must be given either a string or a file, not both"
        sys.exit(1)
    if args.infile:
        # process the input file one string at a time
    if args.string:
        # process the single string