zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python使用技巧(二十四):彻底学会argparse与sys.argv方法

Python方法 技巧 学会 彻底 sys 二十四 使用
2023-09-14 09:15:32 时间

详细说明直接看代码,这里就不注水了。

1、sys.argv

import sys
a=sys.argv[0]  # 当前py路径目录
print(a)
b=sys.argv[1]  #从所以为1开始加入参数
print(b)
c = sys.argv[2:] #2后面的参数都是这个,多余两个自动生成list
#如果制定维度,则[2:4]
print(c)
if __name__ == '__main__':
    pass

# python test_argv.py 2021 x y z m n
'''
test_argv.py
2021
['x', 'y', 'z', 'm', 'n']
'''

2、argparse

案例1:

#-*- coding: UTF-8 -*-
import argparse   #步骤一

def parse_args():
    """
    :return:进行参数的解析
    """
    parser = argparse.ArgumentParser(description="you should add those parameter")        # 这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时,                                                                     # 会打印这些描述信息,一般只需要传递description参数,如上。
    parser.add_argument('--addresses',default="sipingroad", help = "The path of address")
    parser.add_argument('--gpu', default=0)# 步骤二,后面的help是我的描述
    args = parser.parse_args()                                       # 步骤三
    return args

if __name__ == '__main__':
    args = parse_args()
    print(args.addresses)            #直接这么获取即可。
"""
   1、python test_arg.py -h  #帮助
usage: test_arg.py [-h] [--addresses ADDRESSES] [--gpu GPU]
you should add those parameter
optional arguments:
  -h, --help            show this help message and exit
  --addresses ADDRESSES
                        The path of address
  --gpu GPU
  
  2、python test_arg.py --addresses this-is-parameter-of-addresses #输入参数 

  this-is-parameter-of-addresses
  
"""


案例2:


import os
import sys
import argparse


def parse_arguments():
    parser = argparse.ArgumentParser()


    parser.add_argument('--dataset_train_dir', type=str, help='数据集训练数据路径', default='./dataset/MIR-1K/Wavfile')
    # parser.add_argument('--dataset_validate_dir', type=str, help='数据集验证数据路径', default='./dataset/MIR-1K/UndividedWavfile')
    # parser.add_argument('--model_dir', type=str, help='模型保存的文件夹', default='model')
    # parser.add_argument('--model_filename', type=str, help='模型保存的文件名', default='svmrnn.ckpt')
    # parser.add_argument('--dataset_sr', type=int, help='数据集音频文件的采样率', default=16000)
    # parser.add_argument('--learning_rate', type=float, help='学习率', default=0.0001)
    # parser.add_argument('--batch_size', type=int, help='小批量训练数据的长度', default=64)
    # parser.add_argument('--sample_frames', type=int, help='每次训练获取多少帧数据', default=10)
    # parser.add_argument('--iterations', type=int, help='训练迭代次数', default=30000)
    # parser.add_argument('--dropout_rate', type=float, help='dropout率', default=0.95)


    return parser.parse_args()


# # def main(args):
# #先看数据集数据是否存在
# if not os.path.exists(args.dataset_train_dir) or not os.path.exists(args.dataset_validate_dir):
#     raise NameError('数据集路径"./dataset/MIR-1K/Wavfile"或"./dataset/MIR-1K/UndividedWavfile"不存在!')


if __name__ == '__main__':
    args = parse_arguments()
    print(args.dataset_train_dir)

    # print(parse_arguments(sys.argv[1:]))

    # python est1.py - -dataset_train_dir = / data / 2021
    # 输出结果:/ data / 2021






3、结合两种使用更好


import os
import sys
import argparse


def parse_arguments(argv):
    parser = argparse.ArgumentParser()

    #如果路径不成功,可以直接输入绝对路径
    parser.add_argument('--dataset_train_dir', type=str, help='数据集训练数据路径', default='./dataset/MIR-1K/Wavfile')
    parser.add_argument('--dataset_validate_dir', type=str, help='数据集验证数据路径', default='./dataset/MIR-1K/UndividedWavfile')
    # parser.add_argument('--model_dir', type=str, help='模型保存的文件夹', default='model')
    parser.add_argument('--model_filename', type=str, help='模型保存的文件名', default='svmrnn.ckpt')
    # parser.add_argument('--dataset_sr', type=int, help='数据集音频文件的采样率', default=16000)
    # parser.add_argument('--learning_rate', type=float, help='学习率', default=0.0001)
    # parser.add_argument('--batch_size', type=int, help='小批量训练数据的长度', default=64)
    # parser.add_argument('--sample_frames', type=int, help='每次训练获取多少帧数据', default=10)
    # parser.add_argument('--iterations', type=int, help='训练迭代次数', default=30000)
    # parser.add_argument('--dropout_rate', type=float, help='dropout率', default=0.95)


    return parser.parse_args(argv)


def main(args):
    #先看数据集数据是否存在
    if not os.path.exists(args.dataset_train_dir) or not os.path.exists(args.dataset_validate_dir):
        print('1111111-----11111')
        raise NameError('数据集路径"./dataset/MIR-1K/Wavfile"或"./dataset/MIR-1K/UndividedWavfile"不存在!')
        print('22222-----22222')
    else:
        print("路径参数都正确啦!")




if __name__ == '__main__':
    args2021 = parse_arguments(sys.argv[1:])

    print(args2021)
    # 案例1:
    # 表示上面的参数dataset_train_dir后面可以从1开始
    #终端输入参数:python test_arg_path.py --dataset_train_dir=/data/tensorflow
    # 结果:Namespace(dataset_train_dir='/data/tensorflow')

    # 案例2:
    # 表示上面的参数dataset_train_dir后面可以从1开始
    # python test_arg_path.py --model_filename==/tensorflow2/data
    #结果:上次没输入的参数也会输出
    # Namespace(dataset_train_dir='./dataset/MIR-1K/Wavfile', model_filename='=/tensorflow2/data')

    # python test_arg_path.py - -model_filename == 696969696
    # Namespace(dataset_train_dir='./dataset/MIR-1K/Wavfile', model_filename='=696969696')

    main(parse_arguments(sys.argv[1:]))

    #输出结果:
    '''
     python test_arg_path.py --model_filename=696969696 --dataset_train_dir=./dataset/MIR-1K/Wavfile
      --dataset_validate_dir=./separation_of_voice_and_music/dataset/MIR-1K/UndividedWavfile
    输出:
    Namespace(dataset_train_dir='./dataset/MIR-1K/Wavfile', 
    dataset_validate_dir='./separation_of_voice_and_music/dataset/MIR-1K/UndividedWavfile', 
    model_filename='696969696')
    路径参数都正确啦!

    '''