命令行输入包argparse使用指南

使用建议

当选择使用命令行语句启动你的python程序时,通常表现为python从命令行语句获取输入。此时建议将python与命令行交互的代码写在一个类或函数中,并存放在独立的.py文件中,保证代码的高内聚和低耦合。

使用流程

导入argparse包。
1
import argparse
1
parser = argparse.ArgumentParser()
为parser增加若干个属性。

在命令行中即可通过属性对应输入参数。

下面的示例代码中,add_argument()由四个参数组成:

1
parser.add_argument('--graph_size', type=int, default=20, help="The size of the problem graph")
  • 属性名xxx
    • 在属性名之前加上--,意味着这是个可选参数
    • 在属性名参数之前增加一个参数,如--gs,即可达到简写的目的,此时程序内部依然是graph_size,命令行中只要写--gs即可。
  • 数据类型type
    • parser.add_argument对于接受的值默认其为str,如果要将之视为int类型,额外加说明
  • 默认值default
  • 帮助help:
    • 在命令行中输入python xx.py -h就可以得到帮助信息。非常实用,建议好好写各个属性的说明。
生成可实际实用的实例(简称opts)
1
2
opts = parser.parse_args()
gs = opts.graph_size

该语句会把parser中所有”add_argument”属性和值给返回到opts子类实例当中,通过opts就能获取命令行输入的内容。

对opts动动手脚

很多时候需要一些比较特殊或者比较复杂的参数,这些参数的值不直接来源于用户的命令行输入,比如来自本机环境和多种用户输入,此时需要你在代码中直接对opts进行调整。

1
2
# 该属性值来自于当前环境是否存在多个GPU
opts.use_cuda = torch.cuda.is_available() and not opts.no_cuda
1
2
# 该属性值需要对用户输入进行加工处理
opts.run_name = "{}_{}".format(opts.run_name, time.strftime("%Y%m%dT%H%M%S"))
将opts作为返回值返回

于是主程序就能接受命令行输入啦!

参考

《python和命令行之间的交互》https://www.cnblogs.com/still-smile/p/11636958.html 2019.10.8/2020.12.6