设为首页 收藏本站
查看: 1334|回复: 0

[经验分享] python getopt

[复制链接]

尚未签到

发表于 2015-4-24 08:33:05 | 显示全部楼层 |阅读模式
  1.使用getopt模块处理Unix模式的命令行选项:
  getopt模块用于抽出命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式和长选项模式。



e.g. python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b'
import getopt
shortargs = 'f:t'
longargs = ['directory-prefix=', 'format', '--f_long=']
opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )


  getopt函数的格式是getopt.getopt ( [命令行参数列表], "短选项", [长选项列表] )
短选项名后的冒号(:)表示该选项必须有附加的参数。
长选项名后的等号(=)表示该选项必须有附加的参数。
返回opts和args。
opts是一个参数选项及其value的元组( ( '-f', 'hello'), ( '-t', '' ), ( '--format', '' ), ( '--directory-prefix', '/home' ) )
args是一个除去有用参数外其他的命令行输入 ( 'a', 'b' )
  然后遍历opts便可以获取所有的命令行选项及其对应参数了。



for opt, val in opts:
if opt in ( '-f', '--f_long' ):
pass
if ....

  使用字典接受命令行的输入,然后再传送字典,可以使得命令行参数的接口更加健壮。
  两个来自python2.5 Documentation的例子:
  



>>> import getopt
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'abc:d:')
>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
>>> args
['a1', 'a2']
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = s.split()
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', [
...     'condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x',
'')]
>>> args
['a1', 'a2']

  python Documentation中也给出了getopt的典型使用方法:




import getopt, sys
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError, err:
# print help information and exit:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)
output = None
verbose = False
for o, a in opts:
if o == "-v":
verbose = True
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-o", "--output"):
output = a
else:
assert False, "unhandled option"
# ...
if __name__ == "__main__":
main()

  
  下面一段程序演示了在getopt下使用Usage()函数、参数字典(默认参数)、短选项、长选项等。




import os
import os.path
import sys
import getopt
def usage():
print '''
py price.py [option][value]...
-h or --help
-w or --wordattr-file="wordattr文件"
-s or --sflog-pricefile="sflog的价格变化文件"
-t or --tmpdir="临时文件的保存目录,默认为./"
-o or --outputfile="完整信息的保存文件,如果不指定,则输出到stdout"
-a or --wordattr-Complement="较新的wordattr去补全信息,缺省为Null,则丢失新广告的信息"
'''
return 0
if ( len( sys.argv ) == 1 ):
print '-h or --help for detail'
sys.exit(1)
shortargs = 'hw:s:t:o:a:'
longargs = ['help', 'wordattr=', 'sflog-pricefile=', 'tmpdir=', 'outputfile=', 'wordattr-Complement=']
opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )
if args:
print '-h or --help for detail'
sys.exit(1)
paramdict = {'tmpdir':os.path.abspath(os.curdir), 'outputfile':sys.stdout, 'newwordattr':None }
for opt,val in opts:
if opt in ( '-h', '--help' ):
usage()
continue
if opt in ( '-w', '--wordattr' ):
paramdict['wordattr'] = val
continue
if opt in ( '-s', '--sflog-pricefile' ):
paramdict['pricefile'] = val
continue
if opt in ( '-t', '--tmpdir' ):
paramdict['tmpdir'] = val
continue
if opt in ( '-o', '--outputfile' ):
try:
paramdict['outputfile'] = open(val,'w')
except Exception,e:
#ul_log.write(ul_log.fatal,'%s,%s,@line=%d,@file=%s' \
#%(type(e),str(e),sys._getframe().f_lineno,sys._getframe().f_code.co_filename))
sys.exit(1)
continue
if opt in ( '-a', '--wordattr-Complement' ):
paramdict['newwordattr'] = val
continue

  
  2. 使用optparser模块处理Unix模式的命令行选项:
  optparser模块非常的强大,完全体现了python的“如此简单,如此强大”的特性。



import optparse
def getConfig(ini):
import ConfigParser
try:
cfg = ConfigParser.ConfigParser()
cfg.readfp(open(ini))
print cfg.sections()
except:
pass
if __name__=='__main__':
parser = optparse.OptionParser()
parser.add_option(
"-i",
"--ini",
dest="ini",
default="config.ini",
help="read config from INI file",
metavar="INI"
)
parser.add_option(
"-f",
"--file",
dest="filename",
help="write report to FILE",
metavar="FILE"
)
parser.add_option(
"-q",
"--quiet",
dest="verbose",
action="store_false",
default=True,
help="don't print status messages to stdout"
)
(options, args) = parser.parse_args()
getConfig(options.ini)
print args

  another usage:



parser = OptionParser(usage='%prog [options] top_dir_name ')
parser.disable_interspersed_args()
parser.add_option('-t', '--top',
dest='topdir', default=".",
help='the top directory to search')
parser.add_option('-o', '--output',
dest='output', default="auto_search_result.txt",
help='save the search result to output file')
parser.add_option('-d', '--debug',
action='store_true', dest='debug', default=False,
help='enable debug output')
(options, args) = parser.parse_args(sys.argv[1:])
variable options.topdir receive the value of args after -t, so
print options.topdir

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60135-1-1.html 上篇帖子: Python深入学习笔记(一) 下篇帖子: 实例应用之Python
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表