一起学Python-Python传参的各种姿势,函数调用传参、sys.argv传参以及argparse传参

21 篇文章 1 订阅
9 篇文章 0 订阅

前言:

国内对于argparse模块的教程还是挺多的,但是大部分都是不适合初学者的,所以我自己整理了一下,以个人见解来写这篇文章,说的不对的地方还请纠正。

1、模块简介

argparse模块使编写脚本程序的命令行传参变得更加灵活。该程序定义了所需的参数,argparse 并将找出如何解析这些参数sys.argv。argparse 当用户为程序提供无效参数时,该模块还会自动生成帮助和使用情况消息并发出错误。

2、场景设计

在linux中,大部分软件在执行的时候都会出现一些帮助命令,要求在执行的时候传入相关的参数,就拿最常见的MySQL来说,我们在登录数据库的时候都是需要指定一个用户名进行登录,也就是-u参数,当你不使用-u的时候,程序会提示一些报错信息,要求你输入,像这样的程序可以让使用者更加的容易上手,退一步讲,我们在编写相关脚本的时候,也会需要以传参的方式去运行一个完整的程序/脚本。

3、实践操作

例如我设置一个检查文件是否存在的函数,通过传参的方式获取需要判断的文件,此时需要在源码上进行参数的设置才能运行,这样就显得不够方便。

3.1、文件判断案例,函数传参

通过函数调用传参(源码级别)

import os
def check_file(file):
    if os.path.exists(file):
        if os.path.isfile(file):
            print("[%s]是一个文件" %file)
check_file(file='file.py')

在这里插入图片描述
那么如何实现执行脚本的时候就直接传入参数呢?一般情况下可以采取下面的方式:

import os
import sys
def check_file(file):
    if os.path.exists(file):
        if os.path.isfile(file):
            print("[%s]是一个文件" %file)
    else:
        print("找不到文件:【%s】" %file)

file = sys.argv[1]
check_file(file=file)

在这里插入图片描述
虽然说这个方式能实现参数的传入,但是相对来说,如果需要传入的参数有多个,并且有些需要必须设置,有些是可选参数的时候就让其他使用的人不太友好了,例如:

3.2、登录功能案例,sys.argv传参

该函数通过传参的方式打印用户登录信息 (可以改成其他功能)

import sys
def login(user,password,host):
    print("用户名设置为:",user)
    print("密码设置为:",password)
    print("设置的主机地址:",host)

user = sys.argv[1]
password = sys.argv[2]
host = sys.argv[3]
login(user=user, password=password, host=host)

在这里插入图片描述
虽然这样能够实现不修改源码就可以传入对应的参数,但是这样只能按照设定的顺序进行传参,而且没有参数传入的相关帮助,所以这时候就需要用到argparse模块了。

4、B格更高的argparse传参

案例依旧采用登录的功能进行改造,改造源码如下:

import argparse
def main():
    #all_info :接收所有传入的信息
    all_info = argparse.ArgumentParser(description="设置登录信息")
    all_info.add_argument('-u','--user', required=True)
    all_info.add_argument('-p','--password', required=True)
    all_info.add_argument('-H','--host',required=True)
    all = all_info.parse_args()
    print("传入的所有信息(命名空间)如下:", all)
    ##下面开始拆分信息,all.xxx中,xxx为上面定义的--后面的字符串
    name = all.user
    password = all.password
    Host = all.host
    print("用户名:[%s]\n密码:[%s]\n主机:[%s]\n" %(name,password,Host))
if __name__ == '__main__':
    main()

运行语句:

python3 file.py -u liuyi -p 000000 -H localhost

运行结果:
在这里插入图片描述
然后换个姿势,调整传入的顺序:

python3 file.py -u liuyi -H localhost -p the_is_pass

在这里插入图片描述
参数,打印结果依旧一致,没有出现乱套的现象,完美!对于argparse的更多使用方式,将在下一篇专门讲解!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐公交也用券

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值