Java 在Jython中使用optpasse添加子选项
我正在使用optpass向Jython脚本添加选项。他们就像Java 在Jython中使用optpasse添加子选项,java,python,jython,optparse,Java,Python,Jython,Optparse,我正在使用optpass向Jython脚本添加选项。他们就像 $script.py -clear $script.py -start $script.py -stop 所以,现在我的问题是,如何将子选项添加到任何特定选项,如 $script.py -start -name <name> -type <type>, ->这将只提供可以提供给父级“start”选项的选项。那么,请帮助我如何实现这一目标 谢谢, Chakri无法添加“子”选项。通常,帮助选项是通过类似于$
$script.py -clear
$script.py -start
$script.py -stop
所以,现在我的问题是,如何将子选项添加到任何特定选项,如
$script.py -start -name <name> -type <type>,
->这将只提供可以提供给父级“start
”选项的选项。那么,请帮助我如何实现这一目标
谢谢,
Chakri无法添加“子”选项。通常,帮助选项是通过类似于
$script.py--help start
-其中start只是一个字符串选项,您可以读取并显示相应的信息。我最近遇到了同样的问题。对我有效的解决方案如下:
Usage: OptParseExample.py [options]
Copyright 2014 Code Tester (Jython Dev Inc.)
Licensed under the Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-i FILE, --in=FILE set input path [default: ./in.txt]
-o FILE, --out=FILE set output path [default: ./out.txt]
-d, --debug Prints additional debug information
-m KVP, --map=KVP Key value pair mappings (i.e. left=right)
-r Role, --role=Role Protected system roles to use (multiple allowed)
-u User, --user=User Protected system users to be used (multiple allowed)
This will be displayed beneath your help information
- 按照惯例,使用第一个参数表示所需的命令
执行(这将是您的
,开始
,清除
)停止
- 通过
获取此命令(我知道这是一个丑陋的问题) 解决方法)sys.argv[1]
- 创建几个
(每个命令一个)optparse.OptionParser()
- 仅调用相应的
OptionParser
- 如果命令无效或丢失,请创建另一个选项解析器以显示用法
# parse.py
import sys
import optparse
def parse_my_command_line():
opt_parser = {}
opt_parser['start'] = optparse.OptionParser()
opt_parser['clear'] = optparse.OptionParser()
opt_parser['stop'] = optparse.OptionParser()
# Start
opt_parser['start'].usage = 'Help for the START command'
opt_parser['start'].add_option('--name', default = None, type = 'str',
help = 'help for --name option', metavar = '<name>')
opt_parser['start'].add_option('--type', default = None, type = 'str',
help = 'help for --type option', metavar = '<type>')
# Clear
opt_parser['clear'].usage = 'Help for the CLEAR command'
opt_parser['clear'].add_option('--foo', default = None, type = 'str',
help = 'help for --foo option', metavar = '<foo>')
# Stop
opt_parser['stop'].usage = 'Help for the STOP command'
opt_parser['stop'].add_option('--name', default = None, type = 'str',
help = 'help for --name option', metavar = '<name>')
opt_parser['stop'].add_option('--type', default = None, type = 'str',
help = 'help for --type option', metavar = '<type>')
# Get the command from sys.argv
try:
command = sys.argv[1]
except IndexError:
command = None
# Get the appropriate option parser
try:
parser = opt_parser[command]
# Done. Parse arguments and return.
return parser.parse_args()
except KeyError:
# Invalid command. Create a parser to show default usage
parser = optparse.OptionParser()
parser.usage = '%prog [command] [options]\n\n'
parser.usage += 'Description:\n'
parser.usage += ' General help for %prog\n\n'
parser.usage += 'Commands:\n'
for cmd in ['start', 'clear', 'stop']:
parser.usage += ' %s\n' % cmd
parser.usage += ' %s\n\n' % opt_parser[cmd].usage
parser.usage = parser.usage.strip()
if command is None:
parser.error('command cannot be empty')
else:
parser.error('invalid command: %s' % command)
def main():
options, args = parse_my_command_line()
print 'Args = %s' % args
print 'Options = %s' % options
if __name__ == '__main__':
main()
#parse.py
导入系统
导入optpass
def parse_my_命令行():
opt_解析器={}
opt_parser['start']=optparse.OptionParser()
opt_parser['clear']=optparse.OptionParser()
opt_parser['stop']=optparse.OptionParser()
#开始
opt_解析器['start']。用法='start命令的帮助'
opt_解析器['start']。添加_选项('--name',默认值=None,类型='str',
help='help for--name选项',metavar='')
opt_解析器['start']。添加_选项('--type',默认值=None,type='str',
help='help for--type option',metavar='')
#清楚的
opt_解析器['clear']。用法='clear命令的帮助'
opt_解析器['clear']。添加_选项('--foo',默认值=None,类型='str',
help='help for--foo选项',metavar='')
#停止
opt_解析器['stop']。用法='stop命令的帮助'
opt_解析器['stop']。添加_选项('--name',默认值=None,类型='str',
help='help for--name选项',metavar='')
opt_解析器['stop']。添加_选项('--type',默认值=None,type='str',
help='help for--type option',metavar='')
#从sys.argv获取命令
尝试:
command=sys.argv[1]
除索引器外:
命令=无
#获取适当的选项解析器
尝试:
parser=opt_parser[命令]
#完成了。解析参数并返回。
返回parser.parse_args()
除KeyError外:
#无效命令。创建一个解析器来显示默认用法
parser=optparse.OptionParser()
parser.usage='%prog[命令][选项]\n\n
parser.usage+=“说明:\n”
parser.usage+=“有关%prog的一般帮助\n\n”
parser.usage+='命令:\n'
对于[‘开始’、‘清除’、‘停止’]中的cmd:
parser.usage+='%s\n'%cmd
parser.usage+='%s\n\n'%opt\u parser[cmd]。用法
parser.usage=parser.usage.strip()
如果命令为“无”:
parser.error('命令不能为空')
其他:
语法分析器。错误('无效命令:%s'%1!'
def main():
选项,args=parse_my_命令行()
打印“Args=%s”%Args
打印“选项=%s”%Options
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
以下是一些结果:
[usr@localhost ~]$ python parse.py
Usage: parse.py [command] [options]
Description:
General help for parse.py
Commands:
start
Help for the START command
clear
Help for the CLEAR command
stop
Help for the STOP command
parse.py: error: command cannot be empty
[usr@localhost ~]$ python parse.py start
Args = ['start']
Options = {'type': None, 'name': None}
[usr@localhost ~]$ python parse.py stop
Args = ['stop']
Options = {'type': None, 'name': None}
[usr@localhost ~]$ python parse.py clear
Args = ['clear']
Options = {'foo': None}
[usr@localhost ~]$ python parse.py start --help
Usage: Help for the START command
Options:
-h, --help show this help message and exit
--name=<name> help for --name option
--type=<type> help for --type option
[usr@localhost ~]$ python parse.py stop -- help
Args = ['stop', 'help']
Options = {'type': None, 'name': None}
[usr@localhost ~]$ python parse.py clear --help
Usage: Help for the CLEAR command
Options:
-h, --help show this help message and exit
--foo=<foo> help for --foo option
[usr@localhost~]$python parse.py
用法:parse.py[命令][选项]
说明:
parse.py的一般帮助
命令:
开始
START命令的帮助
清楚的
清除命令的帮助
停止
停止命令的帮助
parse.py:错误:命令不能为空
[usr@localhost~]$python parse.py start
Args=['start']
选项={'type':无,'name':无}
[usr@localhost~]$python parse.py stop
Args=['stop']
选项={'type':无,'name':无}
[usr@localhost~]$python parse.py清除
Args=['clear']
选项={'foo':无}
[usr@localhost~]$python parse.py start--帮助
用法:有关START命令的帮助
选项:
-h、 --帮助显示此帮助消息并退出
--name=用于--name选项的帮助
--type=help for--type选项
[usr@localhost~]$python parse.py stop--帮助
Args=[“停止”,“帮助”]
选项={'type':无,'name':无}
[usr@localhost~]$python parse.py清除--帮助
用法:CLEAR命令的帮助
选项:
-h、 --帮助显示此帮助消息并退出
--foo=对--foo选项的帮助
这正是OptionParser设计用来处理的
考虑以下代码:
import sys
import os
from optparse import OptionParser
__all__ = []
__version__ = 0.1
__date__ = '2014-01-21'
__updated__ = '2014-01-21'
def main(argv=None):
'''Command line options.'''
program_name = os.path.basename(sys.argv[0])
program_version = "v0.1"
program_build_date = "%s" % __updated__
program_version_string = '%%prog %s (%s)' % (program_version, program_build_date)
program_longdesc = '''This will be displayed beneath your help information''' # optional - give further explanation about what the program does
program_license = "Copyright 2014 Code Tester (Jython Dev Inc.) \
Licensed under the Apache License 2.0\nhttp://www.apache.org/licenses/LICENSE-2.0"
if argv is None:
argv = sys.argv[1:]
try:
# setup option parser
parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license)
parser.add_option("-i", "--in", dest="infile", help="set input path [default: %default]", metavar="FILE")
parser.add_option("-o", "--out", dest="outfile", help="set output path [default: %default]", metavar="FILE")
parser.add_option("-d", "--debug", dest="modeDebug", action="store_true", help="Prints additional debug information")
parser.add_option("-m", "--map", dest="listKVPs", action="append", help="Key value pair mappings (i.e. left=right)", metavar="KVP")
parser.add_option("-r", "--role", dest="listProtectedRoles", action="append", help="Protected system roles to use (multiple allowed)", metavar="Role")
parser.add_option("-u", "--user", dest="listProtectedUsers", action="append", help="Protected system users to be used (multiple allowed)", metavar="User")
# set defaults
parser.set_defaults(outfile="./out.txt", infile="./in.txt")
# process options
(opts, args) = parser.parse_args(argv)
if opts.modeDebug:
print("Running in DEBUG mode")
if opts.infile:
print("infile = %s" % opts.infile)
if opts.outfile:
print("outfile = %s" % opts.outfile)
if opts.listKVPs:
print("KVP's = %s" % opts.listKVPs)
if opts.listProtectedRoles:
print("Protected Roles = %s" % opts.listProtectedRoles)
if opts.listProtectedUsers:
print("Protected Users = %s" % opts.listProtectedUsers)
'''
Do something interesting with the parameters here!
'''
except Exception, e:
indent = len(program_name) * " "
sys.stderr.write(program_name + ": " + repr(e) + "\n")
sys.stderr.write(indent + " for help use --help")
return 2
if __name__ == "__main__":
sys.exit(main())
如果使用-h(或--help)运行此程序,则会得到以下结果:
Usage: OptParseExample.py [options]
Copyright 2014 Code Tester (Jython Dev Inc.)
Licensed under the Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-i FILE, --in=FILE set input path [default: ./in.txt]
-o FILE, --out=FILE set output path [default: ./out.txt]
-d, --debug Prints additional debug information
-m KVP, --map=KVP Key value pair mappings (i.e. left=right)
-r Role, --role=Role Protected system roles to use (multiple allowed)
-u User, --user=User Protected system users to be used (multiple allowed)
This will be displayed beneath your help information
现在,如果我们使用更多参数来运行它,即:
testScript.py -d -i input.txt -o output.txt -m jython=cool -r Admins -r DomainAdmins
我们得到的输出如下所示:
Running in DEBUG mode
infile = input.txt
outfile = output.txt
KVP's = ['jython=cool']
Protected Roles = ['Admins', 'DomainAdmins']
请注意以下几点:
- 命令行中参数的顺序并不重要(只要参数带有相关标志)
- 本例中的-d选项用作“store_true”参数,以指示它是一个布尔标志
- 其他参数均采用附加值
- 如果接受值的参数可以接受多个值,则可以将其声明为列表(使用append操作)
- 处理完所有参数后,仍然可以通过“args”变量使用任何其他命令行参数
有关更多信息,请参阅注意:自python 2.7版以来,不鼓励使用optparse。optparse模块已弃用,不会进一步开发;argparse模块将继续开发。请参阅以获取更多信息。注意-对于shakaran(出于某些原因,我无法回复该评论!),我不确定argparse模块当前是否可用于Jython。