两行代码,为Python脚本生成命令行
有时候我们会有这样的一个需求:
我们定义了一个Python的方法,方法接收一些参数,但是调用的时候想将这些参数用命令行暴露出来。
比如说这里有个爬取方法:importrequestsdefscrape(url,timeout10):responserequests。get(url,timeouttimeout)print(response。text)复制代码
这里定义了一个scrape方法,第一个参数接收url,即爬取的网址,第二个参数接收timeout,即指定超时时间。
调用的时候我们可能这么调用:scrape(https:www。baidu。com,10)复制代码
如果我们想改参数换url,那就得改代码对吧。
所以有时候我们就想把这些参数用命令行暴露出来,这时候我们可能就用上了argparse等等的库,挨个声明各个参数是干嘛的,非常繁琐,代码如下:parserargparse。ArgumentParser(descriptionScrapeFunction)parser。addargument(url,typestr,helpanintegerfortheaccumulator)parser。addargument(timeout,typeint,helpsumtheintegers(default:findthemax))ifnamemain:argsparser。parseargs()scrape(args。url,args。timeout)复制代码
这样我们才能顺利地使用命令行来调用这个脚本:python3main。pyhttps:www。baidu。com10复制代码
是不是感觉非常麻烦?argparse写起来又臭又长,想想就费劲。Fire
但接下来我们要介绍一个库,用它我们只需要两行代码就可以做到如上操作。
这个库的名字叫做Fire,它可以快速为某个Python方法或者类添加命令行的参数支持。
先看看安装方法,使用pip3安装即可:pip3installfire复制代码
这样我们就安装好了。使用
下面我们来看几个例子。方法支持
第一个代码示例如下:importfiredefhello(nameWorld):returnHellos!nameifnamemain:fire。Fire(hello)复制代码
这里我们定义了一个hello方法,然后接收一个name参数,默认值是World,接着输出了Hello加name这个字符串。
然后接着我们导入了fire这个库,调用它的Fire方法并传入hello这个方法声明,会发生什么事情呢?
我们把这段代码保存为demo1。py,接着用Python3来运行一下:python3demo1。py复制代码
运行结果如下:HelloWorld!复制代码
看起来并没有什么不同。
但我们这时候如果运行如下命令,就可以看到一些神奇的事情了:python3demo1。pyhelp复制代码
运行结果如下:NAMEdemo1。pySYNOPSISdemo1。pyflagsFLAGSnameNAMEDefault:World复制代码
可以看到,这里它将name这个参数转化成了命令行的一个可选参数,我们可以通过name来替换name参数。
我们来试下:python3demo1。pyname123复制代码
这里我们传入了一个name参数是123,这时候我们就发现运行结果就变成了如下内容:Hello123!复制代码
是不是非常方便?我们没有借助argparse就轻松完成了命令行参数的支持和替换。
那如果我们将name这个参数的默认值取消呢?代码改写如下:importfiredefhello(name):returnHellos!nameifnamemain:fire。Fire(hello)复制代码
这时候重新运行:python3demo1。pyhelp复制代码
就可以看到结果变成了如下内容:NAMEdemo1。pySYNOPSISdemo1。pyNAMEPOSITIONALARGUMENTSNAMENOTESYoucanalsouseflagssyntaxforPOSITIONALARGUMENTS复制代码
这时候我们发现name这个参数就变成了必传参数,我们必须在命令行里指定这个参数内容,调用就会变成如下命令:python3demo1。py123复制代码
运行结果还是一样的。类支持
当然fire这个库不仅仅支持给方法添加命令行的支持,还支持给一个类添加命令行的支持。
下面我们再看一个例子:importfireclassCalculator(object):defdouble(self,number):return2numberifnamemain:fire。Fire(Calculator)复制代码
我们把这个代码保存为demo2。py,然后运行:python3demo2。py复制代码
运行结果如下:NAMEdemo2。pySYNOPSISdemo2。pyCOMMANDCOMMANDSCOMMANDisoneofthefollowing:double复制代码
可以看到,这里它将Calculator这个类中的方法识别出来了,COMMAND之一就是double,我们试着调用下:python3demo2。pydouble复制代码
运行结果如下:ERROR:Thefunctionreceivednovaluefortherequiredargument:numberUsage:demo2。pydoubleNUMBERFordetailedinformationonthiscommand,run:demo2。pydoublehelp复制代码
这里就说了,这里必须要指定另外一个参数,叫做NUMBER,同时这个参数还是必填参数,我们试着加下:python3demo2。pydouble4复制代码
运行结果如下:8复制代码
这时候就可以达到正确结果了。
所以说,综合来看,fire可以为一个类命令行,每个命令都对应一个方法的名称,同时在后面添加额外的可选或必选参数,加到命令行参数的后面。重新改写
最后,让我们回过头来,给我们一开始定义的scrape方法添加命令行的参数支持:importrequestsimportfiredefscrape(url,timeout10):responserequests。get(url,timeouttimeout)print(response。text)ifnamemain:fire。Fire(scrape)复制代码
这样就可以了!省去了冗长的argparse的代码,是不是非常方便?
调用就是如下形式:NAMEmain。pySYNOPSISmain。pyURLflagsPOSITIONALARGUMENTSURLFLAGStimeoutTIMEOUTDefault:10复制代码
这里说了,URL是必传参数,timeout是可选参数。
最后调用下:python3main。pyhttps:www。baidu。com复制代码
这样我们就可以轻松将url通过命令行传递过去了。
当然timeout还是可选值,我们可以通过timeout来指定timeout参数:python3main。pyhttps:www。baidu。comtimeout5复制代码
这样两个参数就都能顺利赋值了,最后效果就是爬取百度,5秒超时。
怎么样?是不是很方便?大家快用起来吧!
作者:北江爱国
链接:https:juejin。cnpost7062310879387189279
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于竹影的教学设计范文【教学目标】、体会艺术的创造美与生活的真实美之间的关系。、理解艺术来源于生活,生活处处有艺术。【教学过程】、打出幻灯片(三组国画与照片)谈谈国画与真实图……
记叙文阅读集锦之二十溃散的黑暗赵丽宏我的眼前闪动着一双乌黑的眼睛。在这双眼睛里,世界是一片无穷无尽的黑暗,然而它们执著地亮着,寻觅着旁人无法体会的光明。大约是10年前,记者吴斐告诉我,上海盲童学……
关于旅鼠之谜阅读答案1。从课文中可以获得哪些启示?提示:旅鼠之谜,人们研究了好几个世纪,却始终解不开它们的奥秘。由此联想开去,大自然还有许多奥秘人类无法解释,有些奥秘是非常难解的,有待继续探……
狐假虎威教案教学目标:1、通过学习课文,使学生了解狐狸借老虎的威风吓唬百兽这个成语故事,懂得倚仗别人的威力来抬高自己的身价或欺负弱小的行为是可卑的或可耻的或狐狸很聪明,能想办法,机智……
一年级上册美术教案活动设计(1)引导阶段:教师在课前利用旧衣服自制一挎包,放入各种美术材料和工具。上课时让学生上来抽奖:抽出一样来让其他人说说这是什么东西?是干什么用的?引起学生好奇心,激发他们的……
满面春风的意思解释及造句【满面春风】:(mnminchnfng)【释义】:春风:春天温暖的风。本指春风拂面;温暖宜人。现指心情喜悦;满脸笑容。也用以形容和蔼热情的面容。【语出】:元王实甫《……
我心归去的教案教学步骤:一、导入:《采薇》中主人公表现了强烈的思乡之情,这种乡愁并不仅仅萦绕在出征在外的战士心中,它也也久久萦绕在了每个游子的心底,凝结成了一个永恒的思乡情结,从……
大班语言活动照片教案大班语言活动照片教案1活动意图:摄影是一种文化艺术活动,拍照和欣赏照片是幼儿喜欢的一件事,适合于讲述活动。根据大班孩子的年龄特点认知水平以及语言领域的发展目标,利用……
实践体验OCR软件的使用活动目的:(1)体验ocr软件的基本工作过程。(2)了解ocr软件的实际应用价值。活动步骤:(1)要求学生事先准备包含印刷体汉字的报纸、杂志或书籍。……
个人教学反思怎么写所谓教学反思,是指教师对教育教学实践的再认识、再思考,并以此来总结经验教训,进一步提高教育教学水平。下面我们来看几个案例。课后进行教学反思是教师对所授课程的一种补充。再完……
麻雀教案实录课前谈话略师:大家对麻雀都不会陌生吧,大家都看到过。今天我们就来学学麻雀这篇课文。因为昨天老师到得迟,没有和大家来见面,大家也都是今天早上刚拿到课文,读了没几次,老师想听……
奶茶店粥店火锅店卫生问题频出,如何通过监管保证饮食安全?我国食品安全的现状一直令人担忧,尤其是今年以来不断曝光的餐饮店问题更是让人忧心忡忡:火锅店用扫帚捣制冰机;粥店员工用吃剩的排骨入锅重熬;奶茶店喝出黑色虫子这一切都证明我们的餐饮……
酸的和甜的教学反思范本本课的教学目标是:有感情的朗读课文,培养学生的想象能力,表演能力。通过学生的朗读、表演等形式帮助学生深入感悟。懂得做事不要轻信别人的话,要敢于亲自尝试的道理。本课的教学设……
无理取闹的近义词和反义词是什么无理取闹是指毫无理由地跟人吵闹,故意捣乱。关于无理取闹的近义词和反义词大家知道有哪些吗?接下来就由小编为大家带来关于无理取闹的近义词和反义词,供大家参考,希望可以帮到大家,一起……
一年级下课文寄给青蛙的信教学反思对于一年级的学生来说,记忆生字难度较大。但是他们的好奇心很强,什么事情都想一探究竟,也乐于表现自我。根据学生的这些特点,在教学过程中让孩子当小老师、做游戏,调动学生的积极性,从……
岳阳楼记优秀教案导语:不要让昨天不开心的事让今天的自己不开心了,明天的你一切都会好的。以下小编为大家介绍岳阳楼记优秀教案文章,欢迎大家阅读参考!岳阳楼记优秀教案1教学目标:1、积累……
安身之地成语造句1、无论是哪股大潮,都没有以儒家文明为主干的传统文化安身之地。2、她孤家寡人,力量有限,只能暂时造一小室,作为安身之地,并使已受孕的身体有个产房。3、古希腊人认为他……
长江的开发教后反思设计思路:本节课在深挖教材的基础上,合理设计课堂教学,利用放录相,看图片,分组讨论等多种教学方法,注重引导学生利用地图分析地理事物的分布规律,特征及形成原因,体现学为主体……
语惊四座的意思和造句语惊四座意思是形容发言独特、新奇,使人震惊。下面,小编为大家分享语惊四座的意思和造句,希望对大家有所帮助!【拼音】yjngszu【解释】形容发言独特、新奇,使人震惊……
幼儿园秋天的说课稿说课是教学改革中涌现出来的新生事物,是进行教学研究、教学交流和教学探讨的一种新的教学研究形式,以下是小编收集的幼儿园秋天的说课稿,欢迎查看!幼儿园秋天说课稿1一、教学目标……
小学生要掌握的歇后语歇后语是中华民族特有的语言形式,是熟语的重要成员之一。快一起来看看小学生要掌握的歇后语吧!小学生要掌握的歇后语1)腊月的天气动手动脚(冻手冻脚)2)挑水的回头过景了……
自己去吧第二组教学设计范文学材分析这是一篇内容浅显易懂的童话故事,语言富有童趣。故事内容能激励学生自强自立,学生读后能从中受到启发和教育。教学重点是识字、写字、练习朗读。教学难点是从读中领悟小鸭和……
小松鼠找花生教学案例及反思【案例】师:课文学完了,课文中也给小朋友留下了一个十分有趣的问题:小松鼠每天到花生地去看花生,但是等到花生的花都落光了,也没看见一个花生,这是为什么呢?生:小松鼠这……
三年级体育课听课教学反思范文观摩了三年级刘老师的体育课,很有收获。小学生正处于活泼好动的阶段,如何上好小学生的体育课呢?最重要的是指导学生在玩中学,学中玩,充分发挥小学生喜欢玩的特点,通过游戏的教学,来激……