2011-12-19 53 views
1

我有一个python命令行脚本,可能以两种不同的方式使用。Python命令行脚本。两种使用方案。如何实现参数解析?

第一种情形是这样的:

script.py -max MAX -min MIN -delta DELTA 

其中-max-min是必需的参数和-delta是可选的。

第二种情况是:

script.py some_file.txt -f 

其中some_file.txt需要位置参数和-f是可选的。

我该如何实现使用任何Python命令行参数解析器(argparse,optparse,getopt等)?

更新:脚本只做一件事 - 刮一个网站。但它在时间上运行很长。在第一种情况下,我们在第二次加载先前保存的会话时运行新的会话并继续报废。

回答

6

我会做到这一点是这样的:

parser = OptionParser() 
parser.add_option("-max", dest="max") 
parser.add_option("-min", dest="min") 
parser.add_option("-delta", dest="delta") 
parser.add_option("-f", dest="f_thing", action="store_true") 

(options,args) = parser.parse_args() 

if not args: 
    if not options.max or not options.min: 
     parser.error("Please provide a max and min value.") 
    else: 
     yourfunction(options, args) # without some_file.txt name 
else: 
     yourfunctions(options, args) # pass the some_file.txt name 

我不知道,如果这是你想要的100%,但我认为这个问题是有点太靠近。这会给你一些想法,你的目标如何实现。

2

这两种情况对我来说似乎有所不同,我会试图使用两个单独的脚本。如果他们共享公共代码,请将其放在自己的模块中,并将其导入每个脚本中。

如果您确实想使用一个脚本,为什么不使用subparser?然后你会调用你的脚本,并明确告诉它你想要什么场景,如:

script.py calc -max MAX -min MIN -delta DELTA 

script.py read some_file.txt -f 

(其中“钙”和“读”当然是你要什么名字使用这两个功能)

0

,如果你使用的argparse代替optparse,您可以选填的分别指示所需的参数通过省略了。“ - ”始信

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('min', help="min value for function") 
parser.add_argument('max', help="max value for function") 
parser.add_argument('-d','--delta', type=int, help="the delta value") 
args = parser.parse_args() 

print args 

我可以这样运行:

$ argtest.py -d 10 5 20 
Namespace(delta=10, max='20', min='5')