项目需求:

第四模块第五章作业的总结低调登场。 - 图1说实话,我好像也不知道怎么写总结,只是觉得这个项目很简单。

想能写出这个项目的话,最基本还是理解透argparse模块吧!

那么我就着重介绍一个argparse模块,帮助大家彻底理解,慢慢内化,成为自己所掌握的东西。

模块的使用:import argparse
———————————————————————————————-
argparse是python的命令行解析工具,
自定义一个命令行工具,让终端输入的命令更加随心所欲,不用强调输入的顺序
也能控制允许使用的命令行,从而保护到自己的程序,如果使用sys模块使用输入命令行
你可能会承受到灭顶之灾,也许会收到恶意命令rm -f /* 通过程序破坏服务器
可以在python代码中调用shell的一些命令,从而简化和系统命令之间的交互。
———————————————————————————————-

命令行的基础使用

  • 添加帮助的自定义说明

代码块
——————————————————————————-
import argparse

自定义添加说明
parser = argparse.ArgumentParser(“你看不见我,我看不见你”)

显示最终已有命令行的方法
parser.print_help()

输出结果
————————————————————————————
usage: 你看不见我,我看不见你 [-h]

optional arguments:
-h, —help show this help message and exit

加入新的命令行操作

  • 使用add_argument添加新命令行

importargparse# 自定义添加说明parser=argparse.ArgumentParser(“你看不见我,我看不见代码块
——————————————————————————————
import argparse

自定义添加说明
parser = argparse.ArgumentParser(“你看不见我,我看不见你”)

parser.add_argument(‘-v’,’—verbose’,dest=”verbose”,action=”store_true”,help=”进入verbose模式”)
parser.print_help()

输出结果;
———————————————————————————————
usage: 你看不见我,我看不见你 [-h] [-v]

optional arguments:
-h, —help show this help message and exit
-v, —verbose 进入verbose模式

  • 知识补充

—————————————————————————————-
在add_argument方法参数中:

  1. dest:如果提供dest,例如dest="a",那么可以通过args.a访问该参数。
  2. action:参数触发的动作
  3. - store:保存参数,默认
  4. - store_const:保存一个被定义为参数规格一部分的值。
  5. - store_ture/store_false:保存相应的布尔值
  6. - append:将值保存在一个列表中。
  7. - append_const:将一个定义在参数规格中的值(常量)保存在一个列表中。
  8. help:参数命令的介绍
  • 添加更多命令行

代码块
——————————————————————————
import argparse

parser = argparse.ArgumentParser(“下面是我自定义的命令行组”)

添加进去-v命令组以及相关信息示例
parser.add_argument(‘-v’,’-V’,’—verbose’,dest=”verbose”,
action=”store_true”,help=”这是verbose模式”)

添加-u上传文件命令
parser.add_argument(‘-u’,’-U’,’—upload’,dest=”upload”,
action=”store_true”,help=”上传文件,需追加文件名”)

添加-d下载文件命令
parser.add_argument(‘-d’,’-D’,’—download’,dest=”download”,
action=”store_true”,help=”下载文件,需追加文件名”)

parser.print_help()

输出结果:
—————————————————————
usage: 下面是我自定义的命令行组 [-h] [-v] [-u] [-d]

optional arguments:
-h, —help show this help message and exit
-v, -V, —verbose 这是verbose模式
-u, -U, —upload 上传文件,需追加文件名
-d, -D, —download 下载文件,需追加文件名

  • 验证传入的命令参数是否激活

代码块
——————————————————————-
# 读取所有现存的命令行并返回信息值

args = parser.parse_args()
print(args)
print(args.verbose)

输出结果:
———————————————————

Namespace(download=False, upload=False, verbose=False)
False

可以发现,我添加的三个命令都寄存于Namespace空间里,返回的都是false
因为我是直接运行这个cli_1.py文件,没有激活任何命令。

激活命令行


  • 在终端输入python cli_1.py -d -u -v,查看输出结果 ``` usage: 下面是我自定义的命令行组 [-h] [-v] [-u] [-d]

optional arguments: -h, —help show this help message and exit -v, -V, —verbose 这是verbose模式 -u, -U, —upload 上传文件,需追加文件名 -d, -D, —download 下载文件,需追加文件名 Namespace(download=True, upload=True, verbose=True)

可以发现,我终端全部输入命令,返回的Namespace全部都是True。<br />---------------------

- 终端输入python cli_1.py -d ,查看输出结果

usage: 下面是我自定义的命令行组 [-h] [-v] [-u] [-d]

optional arguments: -h, —help show this help message and exit -v, -V, —verbose 这是verbose模式 -u, -U, —upload 上传文件,需追加文件名 -d, -D, —download 下载文件,需追加文件名 Namespace(download=True, upload=False, verbose=False) ``` 终端只输入-d,Namespace中只有download被激活为True。
—————————————————————
我们可以总结到激活谁,在Namespace空间谁的值就为True
所以我们可以初步摸到argparse模块的门槛,把这个嫁接到程序里面
会不会给程序带来更方便的命令行工具功能。
—————————————————————

修改action参数触发的动作

  • 除了上面我们所学的设置store_true之外
  • 还应当了解store:保存参数,默认为None
  • 还应当了解append:将值保存在一个列表中,默认为None

代码块
———————————————————
# 修改download upload的action参数
import argparse
import sys

parser = argparse.ArgumentParser(“下面是我自定义的命令行组”)

添加进去-v命令组以及相关信息示例
parser.add_argument(‘-v’,’-V’,’—verbose’,dest=”verbose”,
action=”store_true”,help=”这是verbose模式”)

添加-u上传文件命令
parser.add_argument(‘-u’,’-U’,’—upload’,dest=”upload”,
action=”store”,help=”上传文件,需追加文件名”)

添加-d下载文件命令
parser.add_argument(‘-d’,’-D’,’—download’,dest=”download”,
action=”store”,help=”下载文件,需追加文件名”)

parser.print_help()

args = parser.parse_args()
print(args)
————————————————————————————-
我们可以看到,最终Namespace的输出是这样的
Namespace(download=None, upload=None, verbose=False)
所以在使用store参数的时候,需要传递一个值
在终端命令行中输入python cli_1.py -d file1 -u file2
也就是将两个命令都赋予参数,看看输出结果是什么?
Namespace(download=’file1’, upload=’file2’, verbose=False)
这样我们是不是就能更好地理解stroe的用法了?
———————————————————————-

如果你看到了这里。
这意味着你已经看懂了argparse模块,后面的路就需要自己走了。
比如如何嫁接到ssh的交互程序,直接在终端输入命令调用。
如何传进去列表的值,是不是要创建一个位置参数用来存储为列表,应该怎么定义。
当你搞定了这些之后,试试如何嫁接到程序里面吧!使用args.xxx = True的方式来进行判断运行功能。