2012-08-31 42 views
5

我目前有一个python文件,它利用sys.argv [1]在命令行接受一个字符串。然后它对该字符串执行操作,然后将修改后的字符串返回到命令行。使用optparse接受参数的大多数pythonic方法

我想实现批量模式选项中,我可以提供字符串(每行一个,FWIW)的文件,并使其返回到命令行,这样我可以输出做一些重定向像

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

虽然仍然保留目前的能力。

我只运行2.6,所以argparse不是一个选项。我看过的教程要么使用argparse,getopt,要么研究太复杂/不适用的示例。

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

+1

argparse仍是一个选项,它只是没有内置到2.6中。您仍然可以像安装任何第三方软件包一样安装它(例如'pip install argparse')。 –

回答

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 
+0

谢谢!我不知道在2.7之前,argparse是第三方,代码是额外的好处。我会尽快接受这一点,只要我有机会尝试一下:) – verbsintransit

+0

你很受欢迎。 argparse是一个非常强大和直观的工具,我高度推荐它。 –

+1

当对'None'进行测试时,使用'is'和'not'来测试该值是更为pythonic:'如果args.infile为None并且args.string为None:'且'如果args.infile为不是None和args.string不是None:'。 –

3

见我的答案在这里:What's the best way to grab/parse command line arguments passed to a Python script?

作为快捷方式,这里的一些示例代码:

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 
+0

**注意**:自从python版本2.7以后,不鼓励使用* optparse *。 optparse模块已弃用,不会进一步开发;开发将继续使用* argparse *模块。有关更多信息,请参见[PEP 0389](http://www.python.org/dev/peps/pep-0389/)。 – shakaran

相关问题