Python:如何在optparse中提供选项?

jac*_*ack 36 python command-line command-line-arguments

我已经阅读了这篇http://docs.python.org/release/2.6.2/library/optparse.html

但是我不太清楚如何在optparse中选择一个选项?

我试过设置"required = 1"但是我收到了一个错误:

无效的关键字参数:必需

我想让我的脚本需要--file选项由用户输入.我知道action当你不--file为其提供价值时,关键字会给你错误action="store_true".

use*_*312 65

您可以轻松实现所需选项.

parser = OptionParser(usage='usage: %prog [options] arguments')
parser.add_option('-f', '--file', 
                        dest='filename',
                        help='foo help')
(options, args) = parser.parse_args()
if not options.filename:   # if filename is not given
    parser.error('Filename not given')
Run Code Online (Sandbox Code Playgroud)

  • @Ant:是的,我知道,但是括号表示`parser.parse_args()`返回一个`tuple`,所以我让它们留下来! (5认同)
  • +1,但是不需要第5行的括号;) (2认同)

小智 10

在每个必需变量的帮助消息上,我在开始时写一个'[REQUIRED]'字符串,标记它以便稍后解析,然后我可以简单地使用这个函数来包装它:

def checkRequiredArguments(opts, parser):
    missing_options = []
    for option in parser.option_list:
        if re.match(r'^\[REQUIRED\]', option.help) and eval('opts.' + option.dest) == None:
            missing_options.extend(option._long_opts)
    if len(missing_options) > 0:
        parser.error('Missing REQUIRED parameters: ' + str(missing_options))

parser = OptionParser()
parser.add_option("-s", "--start-date", help="[REQUIRED] Start date")
parser.add_option("-e", "--end-date", dest="endDate", help="[REQUIRED] End date")
(opts, args) = parser.parse_args(['-s', 'some-date'])
checkRequiredArguments(opts, parser)
Run Code Online (Sandbox Code Playgroud)

  • 好的谢谢。但为了加快速度并避免需要“import re”,请使用字符串“startwith”方法,如下所示:“if option.help.startswith('[REQUIRED]')”... (2认同)

Ser*_* M. 8

由于if not x对某些(负,零)参数不起作用,

并且为了防止大量的测试,我更喜欢这样的东西:

required="host username password".split()

parser = OptionParser()
parser.add_option("-H", '--host', dest='host')
parser.add_option("-U", '--user', dest='username')
parser.add_option("-P", '--pass', dest='password')
parser.add_option("-s", '--ssl',  dest='ssl',help="optional usage of ssl")

(options, args) = parser.parse_args()

for r in required:
    if options.__dict__[r] is None:
        parser.error("parameter %s required"%r)
Run Code Online (Sandbox Code Playgroud)


Mat*_*kin 5

例如,如果参数是整数或浮点数,而零是有效输入,则当前获得最多选票的答案将不起作用。在这些情况下,它会说有错误。另一种选择(在这里添加其他几个)是做例如

parser = OptionParser(usage='usage: %prog [options] arguments')
parser.add_option('-f', '--file', dest='filename')
(options, args) = parser.parse_args()
if 'filename' not in options.__dict__:
  parser.error('Filename not given')
Run Code Online (Sandbox Code Playgroud)