sys.argv和argparse和os.environ/python命令行中键入参数的三种方式

参考:

  • 命令行运行Python脚本时传入参数–3种方法 https://blog.csdn.net/helloasimo/article/details/124210144

x.1 sys.argv

sys.argv类似于c中main函数中的argv,存储了用户的输入信息。

当你用bash,在shell或者terminal中运行脚本时,你的参数其实传到了sys.argv里面。sys.argv是一个数组,它记录了你在命令行中的输入,并以空格作为分隔符,以字符串形式进行存储。

请添加图片描述

案例如下:

# test.py
import sys
print(sys.argv)

# bash
>> python test.py 2323
>> ['test.py', '2323']

请添加图片描述

x.2 argparse.py 使用

argparse 将从sys.argv中翟信息,或者让用户自己生成信息以供程序执行,合理运用argparse,能够让你的程序更容易配置和运行,一些常用的arguments如下:

请添加图片描述

argparse案例如下:

我们使用argparse.ArgumentParse()生成parser;用parser.add_argument('-key', default='value', type=str, required=False)添加参数,在parser中以键值对方式存储信息;用args=parser.parse_args()生成参数并将args返回。

在别的函数中调用则以args.data_path进行调用。

def parse_args():
    import argparse
    parser = argparse.ArgumentParser(description="pytorch unet training")

    parser.add_argument("--data-path", default="./", help="DRIVE root")
    # exclude background
    parser.add_argument("--num_classes", default=1, type=int)
    parser.add_argument("--device", default="cuda", help="training device")
    parser.add_argument("-b", "--batch-size", default=4, type=int)
    parser.add_argument("--epochs", default=200, type=int, metavar="N",
                        help="number of total epochs to train")

    parser.add_argument('--lr', default=0.01, type=float, help='initial learning rate')
    parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
                        help='momentum')
    parser.add_argument('--wd', '--weight-decay', default=1e-4, type=float,
                        metavar='W', help='weight decay (default: 1e-4)',
                        dest='weight_decay')
    parser.add_argument('--print-freq', default=1, type=int, help='print frequency')
    parser.add_argument('--resume', default='', help='resume from checkpoint')
    parser.add_argument('--start-epoch', default=0, type=int, metavar='N',
                        help='start epoch')
    parser.add_argument('--save-best', default=True, type=bool, help='only save best dice weights')
    # Mixed precision training parameters
    parser.add_argument("--amp", default=False, type=bool,
                        help="Use torch.cuda.amp for mixed precision training")

    args = parser.parse_args()

    return args


if __name__ == '__main__':
    args = parse_args()
	args.data_path

上面的代码和在shell中直接键入如下命令是一样的:

python parse_args.py --data-path=./ --num_classes=1
# or the following is okay
python parse_args.py --data-path ./ --num_classes 1

后面的部分内容省略了,但是效果是一样的。

你需要注意的是如果你写的是--data-path, --num_classes则你在命令行传参就得是--data-path, --num_classes,得一模一样,虽然在代码中访问args中参数的时候就得用args.data_path。所以我们建议参数全部以类似--data_path的方式命名

需要注意,你的argparse.ArgumentParser(description="pytorch unet training")函数不论是封装在if __name__=="__main__"中还是一个函数parse_args()中,都是可以通过在.py文件后面的terminal中的键入参数的操作来读入参数的,如python parse_args.py --data-path=./ --num_classes=1

需要注意,使用该方法从命令行增加的参数需要在.py文件后添加,在前面添加是读取不到的。即不能python --data-path=./ parse_args.py

x.3 os.environ

系统环境变量存储在os.environ中,以dict的键值对的方式实现存储,可以通过访问os.environ这个字典的键值对来访问系统环境变量。

x.4 杂鱼碎碎念

x.4.1 非

python的非结构通过not关键字实现,即c中!=通过not实现。

    if not os.path.exists("/home/yingmuzhi/_weight"):
        os.mkdir("/home/yingmuzhi/_weight")

x.4.2 os.cpu_count()

os.cpu_count()返回CPU线程数,即number of workers。

# linux下查看cpu核心数
1.查看CPU个数

cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

2.查看每个物理CPU含有的核心个数

cat /proc/cpuinfo |grep "cpu cores"|uniq|wc -l

3.查看每个CPU核心含有的线程数

cat /proc/cpuinfo |grep "processor"|wc -l

x.4.3 python 中的?问号运算符

python 中的问号运算符如下:

batch_size = batch_size if batch_size > 1 else 0

# 也可以直接这么玩,在list当中取最小
minimum = min([2, 3, batch_size if batch_size > 1 else 0, 4])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值