范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python笔记命令行参数解析

  有些时候我们需要通过命令行将参数传递给脚本,C语言中有个getopt()方法,python中也有个类似的命令行参数解析方法getopt()。python也提供了比getopt()更简洁的argparse方法。另外,sys模块也可以实现简单的参数解析,本文将对这3种命令行参数解析方法简要介绍。 sys.argv
  sys.argv是传入的参数列表,sys.argv[0]是当前python脚本的名称,sys.argv[1]表示第一个参数,以此类推。 import sys  print(sys.argv) print(sys.argv[0])
  命令行运行: $ python test_sys_argv.py 1 2 3 ["test_sys_argv.py", "1", "2", "3"] test_sys_argv.py
  可以看到传入的参数通过sys.argv来获取,它就是一个参数列表。 getopt方法
  python的getopt与C语言的的getopt()函数类似。相比于sys模块,支持长参数和短参数,并对参数解析赋值。但它需要结合sys模块进行参数解析,语法格式如下: getopt.getopt(args, options, [long_options])
  短参数为单个英文字母,如果必须赋值需要在后面加英文冒号( :  ),长参数一般为字符串(相比短参数,更能说明参数含义),如果必须赋值需要在后面加等号(=  )。 from scapy.all import * import sys  class ArgParser():     # 预处理输入参数     def usage(self):         Usage = """         Usage: python test_getopt.py [OPTION...]             Options:           -f, --field 		-- 字段           -Y, --display-filter 	-- 条件           -c, --count 		-- 计数           -h, --help 		-- 帮助信息            """         print(Usage)      def arg_parser(self):         try:             opts, args = getopt.getopt(sys.argv[1:], "f:Y:c:h", ["field=","display-filter=", "count=","return_flag=", "help"])         except getopt.GetoptError as e:             print(e)             self.usage()             sys.exit()          if opts == []:             self.usage()             sys.exit()         for op, value in opts:             if op in ("-f", "--field"):                 self.filters = value                 print(f"field: {value}")             elif op in ("-Y", "--display-filter"):                 self.display_filter = value                 print(f"display-filter: {value}")             elif op in ("-c", "--count"):                 self.count = int(value)                 print(f"count: {value}")             elif op in ("-h", "--help"):                 self.usage()                 sys.exit()  if __name__ == "__main__":     arg = ArgParser()     arg.arg_parser()
  命令行运行: $ python test_getopt.py -f test -Y hello field: test display-filter: hello
  注意:短参数(options)和长参数(long_options)不需要一一对应,可以任意顺序,也可以只有短参数或者只有长参数。 argparse方法
  argparse模块提供了很多可以设置的参数,例如参数的默认值,帮助消息,参数的数据类型等。argparse类主要包括ArgumentParser、add_argument和parse_args三个方法。 ArgumentParser用于初始化解析器,可设置脚本名,描述信息,帮助信息等 add_argument用于添加参数 parse_args用于解析参数
  下面介绍这三个函数的使用方法。 ArgumentParser
  argparse默认提供了 -h | --help  参数:import argparse  parser = argparse.ArgumentParser(description="脚本描述信息...") parser.parse_args()
  命令行运行: $ python test_argparse.py --help usage: test_argparse.py [-h]  脚本描述信息...  optional arguments:   -h, --help  show this help message and exit add_argument
  下面列出部分参数: name or flags: 参数 action:对参数执行的动作,比如将多个参数放到列表中: action="append"  nargs:关联不同数目的命令行参数到单一动作 default:参数默认值 type:命令行参数应当被转换成的类型 required:此命令行选项是否必须输入 help: 此选项简单描述
  下面来添加参数: import argparse  parser = argparse.ArgumentParser(description="脚本描述信息...") # 添加参数 parser.add_argument("-f", "--field", help = "字段", action="append") parser.add_argument("-Y", "--display-filter", help = "条件", nargs="*") parser.add_argument("-c", "--count", help = "计数", type=int, default=2)  args = parser.parse_args() print(args) print(f"field: {args.field}") print(f"display-filter: {args.display_filter}") print(f"count: {args.count}") print(f"type(count): {type(args.count)}")
  命令行运行: $ python test_argparse.py -f test -f test2 -Y hello  world Namespace(count=2, display_filter=["hello", "world"], field=["test", "test2"]) field: ["test", "test2"] display-filter: ["hello", "world"] count: 2 type(count):  parse_args
  parse_args() 方法用于解析参数,在前面的示例代码中使用parse_args方法来提取参数值,对于无效或者错误的参数会打印错误信息和帮助信息:
  命令行运行: $ python test_argparse.py -F test usage: test_argparse.py [-h] [-f FIELD]                         [-Y [DISPLAY_FILTER [DISPLAY_FILTER ...]]] [-c COUNT] test_argparse.py: error: unrecognized arguments: -F test 总结
  本文介绍了Python的三种命令行参数解析方法sys.argv、getopt和argparse,可以根据自己的需要进行选择,getopt和argparse两种方法相比来说,建议选择argparse,代码量更少更简洁。更详细的使用方法参考官方文档: argparse:https://docs.python.org/zh-cn/3/library/argparse.html getopt:https://docs.python.org/zh-cn/3/library/getopt.html sys.argv:https://docs.python.org/zh-cn/3/library/sys.html
  --THE END--

张勇阿里内网发帖回应女员工被侵害震惊气愤羞愧新京报贝壳财经讯阿里巴巴董事局主席兼CEO张勇8月8日凌晨在阿里内网发帖,用震惊气愤羞愧,表达对阿里一员工涉嫌侵犯女同事事件的感受。他同时表示,必须调查清楚,给全体阿里同学和全社会阿里高层出丑闻,侠客企业文化,养出一群品行低下的下里巴人阿里巴巴近来,在高层出现的问题层出不穷,且一个比一个的事要大,从道德问题渐渐演变到法律问题。阿里巴巴高层蒋凡出轨事件阿里巴巴高层侵害员工事件作为一个世界级公司,阿里巴巴的高层形象,全能的商务旗舰摩托罗拉edgespro体验,2399元值得入手谈起手机的商务范,很多人印象里都一种成熟稳重,甚至还有点外观方正厚实的固有感觉。但现如今商务领域更多的年轻主力军,所以在拥有商务基因的前提下,更需要满足年轻人所喜欢的潮流配置元素。售价10万的日本妻子机器人,除了生孩子什么都能做?别被骗了网络上看到很多报道介绍日本研发出了妻子机器人,除了不能生孩子之外,其余都和真正的妻子没有两样。更为重要的是,这款妻子机器人还非常便宜,仅售10万元,据说1小时内销售一空。但如果你仔小米手机和华为手机哪个更好?说到国产手机品牌,小米和华为绝对能上榜。它们一个主打性价比,一个主打高端(小米也有高端了),在众多手机品牌中脱颖而出,受到了无数消费者的青睐。那么,很多人就会问了,小米手机和华为手为什么现在手机都不支持内存卡了一直以来,记得从使用诺基亚开始,我们的手机都是支持内存卡的,自从苹果的iPhone发布后,越来越多的手机开始不支持内存卡。这是为什么呢?原因很多,我分析了下面几点。一安卓系统的设计八月份即将发布的四款手机从现在来说,新一轮的手机之争显然已经拉开了序幕,各大厂商纷纷进行了预热阶段,甚至有的手机厂商直接给自家的新品进行了定档,也就是说,此时此刻,上半年的手机产品已经很难产生任何的吸引力手机连按5次电源键,厉害又实用,关键时刻能起大作用现在的智能手机隐藏着我们不知道的很多厉害功能,就比如说接下来我们要说的这个功能,虽然很少用到,但是关键时刻能起到大作用,一起来看看吧首先,我们要说的这个功能,就是手机自带的SOS紧8月将是手机选择困难的灾难7月29日华为P50发布后,尽管延迟了半年,取得成果依旧不同凡响。8月各手机商陆续宣布发布各大手机新品,缘由有很大部分是因为苹果手机将于9月发布新品。8月新品有摩托罗拉motoro突发!微信视频号紧急优化,升级青少年模式,更火速回应微视裁员70!发生了什么?漩涡中的腾讯动作不断。日前北京市海淀区人民检察院发布公告,腾讯旗下微信的青少年模式不符合相关规定,侵犯未成年人合法权益,涉及公共利益。检察院支持相关方提起民事公益诉讼。8月7日,微我们开发了一款移动AI计算机新的谷歌智能手机这是一篇德译中的报道,原文来自德国明镜周刊的网络版。对原文感兴趣的小伙伴请查看原文链接httpswww。spiegel。denetzweltgadgetspixel6undtpug
vivoS12系列将于月底上市搭载天玑1200芯片今日联发科官方微博发布消息,回顾了天玑1200旗舰芯片的特性。这一开放平台支持与厂商深度定制,采用台积电6nm工艺制造,拥有MediaTek5GUltraSave省电技术。目前,天雷蛇手机MotoedgeS30参数报价对比雷蛇手机手机机型雷蛇手机MotoedgeS30最新价格1800元1999元屏幕尺寸5。7英寸6。8英寸屏幕类型夏普IGZO屏LCD分辨率2560144024001080像素515p千里之行,始于足下,oppo自研芯片正式官宣12月8日,oppo正式官宣将于12月14日举行oppo未来科技大会,发布旗下首个自研芯片。其实oppo去年初便公布了关于自研芯片的马里亚纳计划,据悉目前芯片团队人数在千人以上。而小红书合并社区部电商部,种草平台能突破变现瓶颈吗?财联社新消费日报(记者李丹昱)讯,作为做跨境电商起家的内容社区,小红书在成功转型种草平台后,正不断深化电商业务。1月25日,有消息称,小红书于近日进行了组织架构调整,原有的社区部和集度完成近4亿美元A轮融资量产车型2023年上市1月26日,百度旗下智能汽车品牌集度宣布已完成近4亿美元的A轮融资,本轮融资由百度和战略合作伙伴吉利共同增持。融资完成后,集度将持续加快研发与量产进程,首款汽车机器人概念车将于今年motoedgeS30首发评测毫无疑问,它是1799元上的唯一的选择motoedgeS30在骁龙865以前,手机厂商虽然有双旗舰的打法,但同期发布的两款旗舰机型为了区分定位,普遍会选择一高一低定位的两颗芯片来实现双旗舰。次旗舰与其说是旗舰或者轻旗舰2022年即将上市的5款重磅手机,每一款都十全九美,值得你等待近两年的手机市场更新迭代非常快,不管是在国内还是国外市场,竞争十分激烈,就在几年前各大厂商已经发布了五款旗舰手机了,而2022年将还有五款手机将会成为年后万众瞩目的焦点!第一部iP雷军出手了,小米MIX4降价1300元送599元充电套装,米粉不等了声明原创不易,禁止搬运,违者必究!当你想要选购一部高端旗舰机型,你会选择哪家手机品牌。大多数人应该会选择华为或者是苹果。不过这两年的华为,在手机业务上因为一些局限性,也有点掉队。这集度汽车获百度与吉利近4亿美元A轮融资,量产车型2023年将上市1月26日,百度旗下智能汽车品牌集度宣布已完成近4亿美元A轮融资,本轮融资由百度和战略合作伙伴吉利共同增持。集度的首款汽车机器人概念车将于今年4月在北京车展发布,量产车型将于202国际货币基金组织再次呼吁萨尔瓦多放弃将比特币作为法定货币记者司林威1月24日,国际货币基金组织(IMF)和萨尔瓦多进行了一次双边磋商。IMF在公开的报告中再次呼吁萨尔瓦多放弃将比特币作为法定货币。萨尔瓦多位于中美洲,2021年9月7日,YouTubeCEO将为视频创作者提供NFT功能财经网科技1月26日讯,据新浪科技消息,YouTubeCEO苏珊沃西基(SusanWojcicki)表示,YouTube正在探索为视频创作者提供NFT(非同质化代币)功能。尽管沃西