Since Python 2.7, the Python standard library has included the argparse module for command line argument processing. There is an argparse tutorial in the Python docs.


In [7]:
%%script /usr/bin/env python - foo

import sys

if len(sys.argv) != 2:
    sys.exit("Usage: myscript.py <parameter>")

In [10]:
%%script /usr/bin/env python - -h

import argparse
import sys

def word_count(input_file):
    count = 0
    for line in input_file:
        count += 1
    return count

parser = argparse.ArgumentParser(description='Count lines in file')
parser.add_argument('input_filename', help='Input filename')
args = parser.parse_args()

try:
    input_file = open(args.input_filename)
except IOError as e:
    print >>sys.stderr, "Failed to open {}: {}".format(
            args.input_filename, sys.stderr)
    sys.exit(1)
else:
    with input_file:
        print args.input_filename, word_count(input_file)


usage: - [-h] input_filename

Count lines in file

positional arguments:
  input_filename  Input filename

optional arguments:
  -h, --help      show this help message and exit

Argparse with optional arguments


In [17]:
%%script /usr/bin/env python - /etc/passwd

import argparse
import sys

def word_count(input_file):
    count = 0
    for line in input_file:
        count += 1
    return count

parser = argparse.ArgumentParser(description='Count lines in file')
parser.add_argument('input_file', type=argparse.FileType(),
                    help='Input filename')
parser.add_argument('output_file', type=argparse.FileType('w'),
                    nargs='?', default=sys.stdout,
                    help='Output filename')
args = parser.parse_args()

with args.input_file:
    print >>args.output_file, args.input_file.name, word_count(args.input_file)


/etc/passwd 51

In [24]:
%%script /usr/bin/env python - --language german Chris

import argparse

parser = argparse.ArgumentParser(description='Greet someone')
parser.add_argument('--language','-L', choices=('english','german'),
                    default='english',
                    help='Language to greet in')
parser.add_argument('name', nargs='?', default='',
                    help='Person to greet')
args = parser.parse_args()

if args.language == 'english':
    greeting = "Good day"
elif args.language == 'german':
    greeting = "Guten tag"

print ' '.join([greeting, args.name])


Guten tag Chris

In [ ]: