Santosh Kumar wrote: > Yes, Peter got it right. > > Now, how can I replace: > > script, givenfile = argv > > with something better that takes argv[1] as input file as well as > reads input from stdin. > > By input from stdin, I mean that currently when I do `cat foo.txt | > capitalizr` it throws a ValueError error: > > Traceback (most recent call last): > File "/home/santosh/bin/capitalizr", line 16, in <module> > script, givenfile = argv > ValueError: need more than 1 value to unpack > > I want both input methods.
You can use argparse and its FileType: import argparse import sys parser = argparse.ArgumentParser() parser.add_argument("infile", type=argparse.FileType("r"), nargs="?", default=sys.stdin) args = parser.parse_args() for line in args.infile: print line.strip().title() # replace with your code As this has the small disadvantage that infile is opened immediately I tend to use a slight variation: import argparse import sys from contextlib import contextmanager @contextmanager def xopen(filename): if filename is None or filename == "-": yield sys.stdin else: with open(filename) as instream: yield instream parser = argparse.ArgumentParser() parser.add_argument("infile", nargs="?") args = parser.parse_args() with xopen(args.infile) as instream: for line in instream: print line.strip().title() -- http://mail.python.org/mailman/listinfo/python-list