使用optparse接受参数的最pythonic方式是什么?

5
我目前有一个Python文件,利用sys.argv[1]来接受命令行中的字符串。然后对该字符串执行操作,最后将修改后的字符串返回到命令行。
我想实现批处理模式选项,可以提供一个字符串文件(每行一个),并将其返回到命令行,以便我可以通过重定向输出来执行操作。
$ python script.py -someflag file.txt > modified.txt 

同时保留当前功能。

我只运行2.6版本,因此argparse不是一个选项。我看到的教程要么使用argparse、getopt,要么深入到过于复杂/不适用的示例中。

检查输入并采取适当措施的最佳方法是什么?


1
argparse仍然是一种选择,只是它没有内置于2.6版本。您仍然可以像安装任何第三方包一样安装它(例如 pip install argparse)。 - David Robinson
2个回答

6

argparse仍然是一个选择,只是它没有内置在2.6中。您仍然可以像安装任何第三方包一样安装它(例如,使用easy_install argparse)。

这个的示例代码如下:

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

谢谢!我之前不知道argparse在2.7之前是第三方库,这段代码也是额外的奖励。我一有机会试用它,很可能就会接受它 :) - verbsintransit
非常感谢。argparse 是一个非常强大和直观的工具,我强烈推荐使用它。 - David Robinson
1
在针对 None 进行测试时,更符合 Python 风格的方法是使用 isis not 来测试该值:if args.infile is None and args.string is None:if args.infile is not None and args.string is not None: - Martijn Pieters

3

请查看我在这里的回答:Python脚本中获取和解析命令行参数的最佳方法是什么?

作为捷径,这里有一些示例代码:

import optparse

parser = optparse.OptionParser()

parser.add_option('-q', '--query',
    action="store", dest="query",
    help="query string", default="spam")

options, args = parser.parse_args()

print 'Query string:', options.query

注意:自 Python 2.7 版本起,不建议使用 optparse。optparse 模块已被弃用且不再继续开发;开发将继续使用 argparse 模块。有关更多信息,请参见 PEP 0389 - shakaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接