<p>对于输入文件,可以使用<a href="http://docs.python.org/library/fileinput.html" rel="noreferrer">^{<cd1>}</a>模块。它遵循输入文件的通用约定:如果没有给定文件或文件名为“-”,则读取stdin,否则从命令行给定的文件中读取。</p>
<p>不需要<code>-f</code>和<code>--file</code>选项。如果你的程序总是需要一个输入文件,那么它不是一个选项。</p>
<p><code>-o</code>和<code>--output</code>用于指定<a href="http://www.gnu.org/prep/standards/html_node/Option-Table.html#Option-Table" rel="noreferrer">the output file name in various programs</a>。</p>
<h3>optparse</h3>
<pre><code>#!/usr/bin/env python
import fileinput
import sys
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-o', '--output',
help='Specifies the output file. The default is stdout.')
options, files = parser.parse_args()
if options.output and options.output != '-':
sys.stdout = open(options.output, 'w')
for line in fileinput.input(files):
process(line)
</code></pre>
<h3>argparse</h3>
<p><a href="http://docs.python.org/library/argparse.html" rel="noreferrer">^{<cd6>}</a>模块允许您显式指定文件作为参数:</p>
<pre><code>#!/usr/bin/env python
import fileinput
import sys
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('files', nargs='*', help='specify input files')
group = parser.add_mutually_exclusive_group()
group.add_argument('-o', '--output',
help='specify the output file. The default is stdout')
group.add_argument('-i', '--inplace', action='store_true',
help='modify files inplace')
args = parser.parse_args()
if args.output and args.output != '-':
sys.stdout = open(args.output, 'w')
for line in fileinput.input(args.files, inplace=args.inplace):
process(line)
</code></pre>
<p>注意:我在第二个示例中添加了<code>--inplace</code>选项:</p>
<pre><code>$ python util-argparse.py --help
usage: util-argparse.py [-h] [-o OUTPUT | -i] [files [files ...]]
positional arguments:
files specify input files
optional arguments:
-h, --help show this help message and exit
-o OUTPUT, --output OUTPUT
specify the output file. The default is stdout
-i, --inplace modify files inplace
</code></pre>