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)
小智 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)
由于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)
例如,如果参数是整数或浮点数,而零是有效输入,则当前获得最多选票的答案将不起作用。在这些情况下,它会说有错误。另一种选择(在这里添加其他几个)是做例如
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)
| 归档时间: |
|
| 查看次数: |
53349 次 |
| 最近记录: |