美文网首页
Python命令行传入参数(cmd2args)

Python命令行传入参数(cmd2args)

作者: disanda | 来源:发表于2020-03-29 12:33 被阅读0次

    命令行传入参数

    1.sys模块

    通过传入sys.argv列表,这里列表元素必须大于等于代码中设定的长度(长了会截断),不然会报错。

    import sys
    
    def test_for_sys(year, name, body):
        print('the year is', year)
        print('the name is', name)
        print('the body is', body)
    
    if __name__ == '__main__':
        try:
            year, name, body = sys.argv[1:4]
            test_for_sys(year, name, body)
        except Exception as e:
            print(sys.argv)
            print(e)
    

    2.argparse模块

    专门的参数设置模块,功能比上面的多,使用分为如下三步:

    1.通过设置一个argparse.ArgumentParser()对象,这里取名为parser

    2.为parser对象添加add_argument()方法来设置参数

    3.最后通过parser对象的parse_args()方法来重新获得一个可通过属性调用参数的对象,这里取名为args

    import argparse
    def test_for_sys(year, name, body):
        print('the year is', year)
        print('the name is', name)
        print('the body is', body)
        
    parser = argparse.ArgumentParser(description='Test for argparse')
    parser.add_argument('--name', '-n', help='name 属性,非必要参数')
    parser.add_argument('--year', '-y', help='year 属性,非必要参数,但是有默认值', default=2017)
    parser.add_argument('--body', '-b', help='body 属性,必要参数', required=True)
    args = parser.parse_args()
    
    if __name__ == '__main__':
        try:
            test_for_sys(args.year, args.name, args.body)
        except Exception as e:
            print(e)
    

    add_arguments的自带属性有:

    • name or flags:也就是在使用参数的时候使用的符号,--foo 或者 -f
    • action:可以选择参数在只提供符号而不输入实际的值的时候给予一个默认的值
    • nargs:这个属性规定了参数可以输入的个数
    • const:这属性跟 action 属性一起使用
    • default:这属性就是给参数设置一个默认值
    • type:这个属性规定了参数的数据类型
    • choices:这个属性给参数限定了一个选择的迭代,参数只能在这个范围内选择参数的值,否则报错
    • required:参数的值为必填

    3.click第三方库

    其使用装饰器添加命令行属性,之后直接调用参数名即可

    import click
    
    @click.command()
    @click.option('--name','-n',default='Leijun',help='name 参数,非必须,有默认值')
    @click.option('--year','-y',help='year 参数',type=int)
    @click.option('--body','-b',help='body 参数 必填',required=True)
    def test_for_sys(year, name, body):
        print('the year is', year)
        print('the name is', name)
        print('the body is', body)
    
    if __name__ == '__main__':
        test_for_sys()
    

    参考:https://tendcode.com/article/python-shell/

    相关文章

      网友评论

          本文标题:Python命令行传入参数(cmd2args)

          本文链接:https://www.haomeiwen.com/subject/gjwyuhtx.html