草莓视频下载-草莓app最新下载地址 061-95756314

如何编写完美的Python命令行程序?

作者:草莓视频下载二维码 时间:2021-06-13 00:29
本文摘要:做为Python开发人员,大家经常要编写cmd程序流程。例如在我的数据科学研究新项目中,我想从cmd经营脚本来训炼实体模型,及其推算出来优化算法的准确度等。 因而,更为便捷更为通俗易懂的脚本必须非常好地提高生产主力,特别是在有好几个开发人员主要从事同一个新项目的场所下。

草莓视频下载

做为Python开发人员,大家经常要编写cmd程序流程。例如在我的数据科学研究新项目中,我想从cmd经营脚本来训炼实体模型,及其推算出来优化算法的准确度等。

因而,更为便捷更为通俗易懂的脚本必须非常好地提高生产主力,特别是在有好几个开发人员主要从事同一个新项目的场所下。因而,我建议你遵照下列四条标准:尽可能获取环境变量参数值全部不正确状况必不可少应急处置(比如,参数缺点,种类不正确,去找接近文档)全部参数和选择项必不可少有文本文档并不是马上顺利完成的每日任务应当说明时间轴荐个比较简单的事例大家把这种标准运用于到一个确立的事例上。这一脚本能够用以凯撒加密法数据加密和破译信息。假定早就有一个写成好的encrypt涵数(搭建以下),大家务必开创一个比较简单的脚本,用于数据加密和破译信息。

大家期待让客户根据命令行参数随意选择数据加密方式(环境变量)和破译方式,并随意选择一个秘钥(环境变量为1)。defencrypt(plaintext,key):cyphertext=''forcharacterinplaintext:ifcharacter.isalpha():number=ord(character)number+=keyifcharacter.isupper():ifnumber>ord('Z'):number-=26elifnumber<ord('A'):number+=26elifcharacter.islower():ifnumber>ord('z'):number-=26elifnumber<ord('a'):number+=26character=chr(number)cyphertext+=characterreturncyphertext大家的脚本务必保证的第一件事便是出示命令行参数的值。当我们寻找“pythoncommandlinearguments”时,经常会出现的第一个結果是有关sys.argv的,因此 大家来试一下这一方式……“新手”的方式sys.argv是个列表,包含客户在经营脚本时輸出的全部参数(还包含脚本名本身)。

比如,假如輸出:>pythoncaesar_script.py--key23--decryptmysecretmessagepbvhfuhwphvvdjh该列表将包含:['caesar_script.py','--key','23','--decrypt','my','secret','message']因而只需迭代更新该参数列表,找寻'--key'(或'-k')以得到 秘钥值,找寻'--decrypt'以设定破译方式(本质上只务必用以秘钥的旋转做为秘钥才可)。最终大家的脚本大致以下:importsysfromcaesar_encryptionimportencryptdefcaesar():key=1is_error=Falseforindex,arginenumerate(sys.argv):ifargin['--key','-k']andlen(sys.argv)>index+1:key=int(sys.argv[index+1])delsys.argv[index]delsys.argv[index]breakforindex,arginenumerate(sys.argv):ifargin['--encrypt','-e']:delsys.argv[index]breakifargin['--decrypt','-d']:key=-keydelsys.argv[index]breakiflen(sys.argv)==1:is_error=Trueelse:forarginsys.argv:ifarg.startswith('-'):is_error=Trueifis_error:print(f'Usage:python{sys.argv[0]}[--key<key>][--encrypt|decrypt]<text>')else:print(encrypt(''.join(sys.argv[1:]),key))if__name__=='__main__':caesar()这一脚本遵照了一些大家前边举荐的标准:抵制环境变量秘钥和环境变量方式基础的处理错误(没获取輸出文字的状况,及其获取了没法识别的参数的状况)不正确时或是不携带一切参数启用脚本的时候会说明文本文档:>pythoncaesar_script_using_sys_argv.pyUsage:pythoncaesar.py[--key<key>][--encrypt|decrypt]<text>可是,这一凯撒加密法脚本过度宽了(39行,在其中乃至都还没还包含数据加密编码自身),并且难以记诵。分析命令行参数理应也有更优的方法……试一下argparse?argparse是Python用于分析命令行参数的标准库。

大家来想起用argparse如何编写凯撒加密的脚本:importargparsefromcaesar_encryptionimportencryptdefcaesar():parser=argparse.ArgumentParser()group=parser.add_mutually_exclusive_group()group.add_argument('-e','--encrypt',action='store_true')group.add_argument('-d','--decrypt',action='store_true')parser.add_argument('text',nargs='*')parser.add_argument('-k','--key',type=int,default=1)args=parser.parse_args()text_string=''.join(args.text)key=args.keyifargs.decrypt:key=-keycyphertext=encrypt(text_string,key)print(cyphertext)if__name__=='__main__':caesar()这一段编码也遵照了所述标准,并且与前边的手工制作编写的脚本相比,能够获取更为精准的文本文档,及其更为具有易用性的处理错误:>pythoncaesar_script_using_argparse.py--encodeMymessageusage:caesar_script_using_argparse.py[-h][-e|-d][-kKEY][text[text...]]caesar_script_using_argparse.py:error:unrecognizedarguments:--encode>pythoncaesar_script_using_argparse.py--helpusage:caesar_script_using_argparse.py[-h][-e|-d][-kKEY][text[text...]]positionalarguments:textoptionalarguments:-h,--helpshowthishelpmessageandexit-e,--encrypt-d,--decrypt-kKEY,--keyKEY可是,仔细看过这一段编码后,我寻找(尽管有点儿主观性)涵数末尾的两行(从7行到13行)界定了参数,但界定方法并但是于优雅:它过度懒散了,并且基本上是类型化的。理应有更为说明性、更为简洁的方式。click能保证得更优!碰巧的是,有一个Python库能获取与argparse某种意义的作用(乃至还能获取更为多),它的编码设计风格更为优雅。

这一库的姓名叫click。这儿是凯撒加密脚本的第三版,用以了click:importclickfromcaesar_encryptionimportencrypt@click.command()@click.argument('text',nargs=-1)@click.option('--decrypt/--encrypt','-d/-e')@click.option('--key','-k',default=1)defcaesar(text,decrypt,key):text_string=''.join(text)ifdecrypt:key=-keycyphertext=encrypt(text_string,key)click.echo(cyphertext)if__name__=='__main__':caesar()注意如今参数和选择项都会标识器里界定,界定好的参数必需做为涵数参数获取。我解释一下上边编码中的一些地区:脚本参数界定中的nargs参数登陆了该参数期待的英语单词的数量(一个用冒号含一起的字符串数组算术一个英语单词)。

初始值是1。这儿nargs=-1允许对接给出数量的英语单词。--encrypt/--decrypt这类字读音能够界定基本上物理地址的选择项(类似argparse中的add_mutually_exclusive_group涵数),它将造成一个布尔型参数。

click.echo是该库获取的一个专用工具涵数,它的作用与print完全一致,但相溶Python2和Python3,也有一些别的作用(如应急处置色调等)。加到一些隐蔽性这一脚本的参数(被数据加密的信息)应该是最少商业秘密。

而大家却回绝客户必需在终端设备里輸出文字,促使这种文字被纪录在指令历史时间中,这不是很讽刺吗?解决困难方式之一便是用以隐秘的提示。或是能够从輸出文档中载入文字,针对较长的文字而言更为具体一些。

或是能够干脆让客户随意选择。键入也一样:客户能够存留到文档中,还可以键入到终端设备。


本文关键词:如何,草莓app最新下载地址,编,写完,美的,Python,命令行,程序,做为

本文来源:草莓视频下载-www.snoknits.com