1. Parâmetros de linha de comando argparse

1. Descrição do parâmetro:

nome ou sinalizadores - um nome ou uma lista de strings de opções, como foo ou -f, --foo.

ação - o tipo básico de ação usada quando o parâmetro aparece na linha de comando, ação - a ação quando a linha de comando encontra o parâmetro, o valor padrão é armazenar.
– store_const, significa que a atribuição é const;
–append, armazena os valores encontrados em uma lista, ou seja, se os parâmetros forem repetidos, múltiplos valores serão salvos;
–append_const, salva um valor definido na especificação do parâmetro em uma lista;
– count , armazena o número de encontros; além disso, você também pode herdar argparse.Action para personalizar a análise de parâmetros;

nargs é usado para descrever o número de parâmetros passados, '+' significa passar pelo menos um parâmetro
nargs - o número de parâmetros de linha de comando que devem ser lidos, pode ser
um número específico ou um sinal ?, quando nenhum valor é especificado, para Usar padrão para argumento posicional e use const
ou sinal * para argumento opcional, que significa 0 ou mais parâmetros;
ou sinal +, que significa 1 ou mais parâmetros.

const - uma constante exigida por algumas seleções de ações e nargs.

padrão - o valor usado quando o parâmetro não aparece na linha de comando.

type - o tipo para o qual o argumento da linha de comando deve ser convertido. (int, lista, str, tupla, conjunto, ditado)

escolhas - um contêiner de parâmetros disponíveis.

obrigatório - se esta opção de linha de comando pode ser omitida, o padrão é falso.

ajuda - uma breve descrição do que esta opção faz.

metavar – Exemplo de valores de parâmetros usados ​​em mensagens de uso.

dest - o nome do atributo a ser adicionado ao objeto retornado por parse_args().

2. Uso de parâmetros

1. O
parâmetro name name é usado para chamar diretamente args.name.
Existem duas maneiras de definir o nome do parâmetro. A diferença se reflete no fato de haver – ou - antes do nome (quando o nome é abreviado).
O parâmetro necessário (sem -) é o seguinte: A ordem das configurações corresponde à leitura e você não precisa escrever um nome ao chamar.
Parâmetros opcionais (com -): Você pode ler fora de ordem e precisa escrever um nome quando ligando.

2. Parâmetros posicionais
Ao passar parâmetros na linha de comando, a ordem dos parâmetros passados ​​​​é diferente e os resultados da execução geralmente são diferentes.Isso ocorre porque são usados ​​​​parâmetros posicionais, como
import argparse
parser = argparse.ArgumentParser(description= 'nome' )
parser.add_argument('param1', type=str,help='sobrenome')
parser.add_argument('param2', type=str,help='nome')
args = parser.parse_args()
# Imprimir nome
print(args .param1+args.param2)

#Defina parâmetros posicionais:
parser.add_argument('outfile')

3. Parâmetros opcionais
Para evitar o bug dos parâmetros posicionais acima na linha de comando (é fácil esquecer a ordem), você pode usar parâmetros opcionais. Isso é um pouco como parâmetros de passagem de palavras-chave, mas você precisa adicionar – na frente das palavras-chave. Embora parâmetros opcionais O método de escrita seja relativamente complicado, mas aumenta a legibilidade da linha de comando e torna menos provável que cause confusão de dados devido à ordem em que os parâmetros são passados. Por exemplo:
a entrada acima deve ter um raio de 1 na frente e uma altura de 3 atrás. Se você quiser alterar a ordem da entrada ou carregar o nome do parâmetro ao mesmo tempo que o parâmetro de entrada, você pode use o parâmetro de seleção e adicione dois analisadores "-" antes do nome do parâmetro ao adicionar o parâmetro
.
Existe outra maneira de parâmetro alias através de "-". Observe que o nome do parâmetro modificado por "-" deve existir:
parser.add_argument ('-r', '–radius', type=int, help='Radius of cilindro')
parser.add_argument(' -H', '–height', type=int, help='Altura do cilindro')

4. Nargs
é usado para descrever o número de parâmetros passados, que pode ser
um número específico: quantos '*'s devem ser passados
: qualquer
'?': um ou nenhum 1/0
'+': pelo menos um ≥ 1
período posterior Quando você chama esse parâmetro, ele armazena o que você passa na forma de uma lista.
Então vamos melhorar o programa acima para encontrar a soma de dois inteiros.
import argparse
parser = argparse.ArgumentParser(description='This código é usado para encontrar a soma de dois inteiros. Soma de inteiros')
#Este objeto de análise é equivalente a um contêiner total que armazena todas as informações
parser.add_argument("integers", type=int,nargs=2,help="first inteiro")

5. Tipo
type é usado para determinar qual tipo de dados você usa para ler os parâmetros.
O padrão é uma string, igual à função de entrada.

6. Atributo obrigatório
Você pode opcionalmente adicionar o atributo necessário na etapa de adição de parâmetros. Durante o processo de entrada da linha de comando, se você especificar apenas determinados parâmetros e os valores de outros parâmetros não forem especificados, você poderá executar o programa, qual não é Parâmetros cujos valores são especificados será atribuído o valor Nenhum. O atributo obrigatório requer que o parâmetro receba um valor, caso contrário, um erro será relatado
parser.add_argument('-r', '–radius', type=int, metavar='', require=True, help='Radius do cilindro') parser.add_argument
( '-H', '–height', type=int, metavar='', require=True, help='Altura do cilindro')

7. Atributo dest
Você pode usar dest=xxx para definir o nome da variável do parâmetro em vez de "-xxx". Da mesma forma, use args.xxx no código para obter o valor do parâmetro.
parser.add_argument('-r', destino='raio', type=int, help='Raio do cilindro')
parser.add_argument('-H', dest='altura', type=int, help='Altura do cilindro')

8. A ação usa parâmetros mutuamente exclusivos

4. Conversão mútua entre argparse e dict


import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-f', '--face', help='use this face', dest='source_img')
    parser.add_argument('-t', '--target', help='replace this face', dest='target_path')
    parser.add_argument('-o', '--output', help='save output to this file', dest='output_file')
    parser.add_argument('--keep-fps', help='maintain original fps', dest='keep_fps', action='store_true', default=False)
    parser.add_argument('--keep-frames', help='keep frames directory', dest='keep_frames', action='store_true', default=False)
    parser.add_argument('--all-faces', help='swap all faces in frame', dest='all_faces', action='store_true', default=False)
    parser.add_argument('--max-memory', help='maximum amount of RAM in GB to be used', dest='max_memory', type=int)
    parser.add_argument('--cpu-cores', help='number of CPU cores to use', dest='cpu_cores', type=int, default=max(8 / 2, 1))
    parser.add_argument('--gpu-threads', help='number of threads to be use for the GPU', dest='gpu_threads', type=int, default=8)
    parser.add_argument('--gpu-vendor', help='choice your GPU vendor', dest='gpu_vendor', choices=['apple', 'amd', 'intel', 'nvidia'])

    args = parser.parse_known_args()[0]
    print('所有参数:',args)
    print('图片参数:',args.source_img)

    print('---------------------------------------')

    # 此时得到的configs为Namespace类型,它包含了__dict__属性,
    # 因此可以使用vars将configs转换为字典dic(只要变量包含了__dict__属性就可以使用vars转换为字典)
    print('类型argperser:',type(args))
    dic = vars(args)
    print('类型dict:', type(dic))

    print('---------------------------------------')

    # 1、argparser转字典
    args_dict = vars(args)
    # use the dict
    for k in args_dict.keys():
        print(k, args_dict[k], type(args_dict[k]))

    print('---------------------------------------')

    # 2、 dict 转ArgumentParser
    # create a dict object
    a_student = {
    
    'Name': 'JACK Williams',
                 'ID': 391568,
                 'At_School': True,
                 'Math_Score': 92.3}


    # transfer the dict object to an ArgumentParser object
    args = argparse.Namespace(**a_student)
    print('类型argparser:', type(args))
    # use the ArgumentParser object
    print(args.Name, type(args.Name))
    print(args.ID, type(args.ID))
    print(args.At_School, type(args.At_School))
    print(args.Math_Score, type(args.Math_Score))

if __name__ == '__main__':
    main()
    # 运行参考
    # python run.py --gpu-vendor nvidia --keep-fps --all-faces -f img/face/mimi.jpg -t img/video/nui.mp4 -o img/out/nui.mp4

5. Código de referência

import math
import argparse
parser = argparse.ArgumentParser(description='Calculate volume of a cylinder')
parser.add_argument('-r', '--radius', type=int, metavar='', required=True, help='Radius of cylinder')
parser.add_argument('-H', '--height', type=int, metavar='', required=True, help='Height of cylinder')
# 添加互斥组
group = parser.add_mutually_exclusive_group()
# 给互斥组添加两个参数
# 给参数的action属性赋值store_true,程序默认为false,当你执行这个命令的时候,默认值被激活成True
group.add_argument('-q', '--quiet', action='store_true', help='Print quiet')
group.add_argument('-v', '--verbose', action='store_true', help='Print verbose')
args = parser.parse_args()
def cylinder_volume(radius, height):
    vol = (math.pi) * (radius**2) * (height)  # 体积公式
    return vol
if __name__ == '__main__':
    volume = cylinder_volume(args.radius, args.height)
    # 互斥参数
    if args.quiet:
        print(volume)
    elif args.verbose:
        print('Volume of a Cylinder with radius %s and height %s is %s' % (args.radius, args.height, volume))
    else:
        print('Volume of Cylinder = %s' % volume)
    # 这就是互斥参数如何工作的,你不能同时执行两个命令,你可以执行一个,所以和互斥组里的两个参数交互时,你只能
    # 执行quiet和verbose中的一个,或者是都不执行按照默认计划来
    # 使用: python test_argparse.py  -r 2 -H 4
    #       python test_argparse.py  -r 2 -H 4 -v
    #       python test_argparse.py  -r 2 -H 4 -q

9. metavar - Exemplos de valores de parâmetros usados ​​em mensagens de métodos de uso, auxiliando o parâmetro -h a visualizar informações de descrição.
Insira a descrição da imagem aqui

3. Programa

# backup.py

import argparse

def main():
    # 定义一个ArgumentParser实例:
    parser = argparse.ArgumentParser(
        prog='backup', # 程序名
        description='Backup MySQL database.', # 描述
        epilog='Copyright(r), 2023' # 说明信息
    )
    # 定义位置参数:
    parser.add_argument('outfile')
    # 定义关键字参数:
    parser.add_argument('--host', default='localhost')
    # 此参数必须为int类型:
    parser.add_argument('--port', default='3306', type=int)
    # 允许用户输入简写的-u:
    parser.add_argument('-u', '--user', required=True)
    parser.add_argument('-p', '--password', required=True)
    parser.add_argument('--database', required=True)
    # gz参数不跟参数值,因此指定action='store_true',意思是出现-gz表示True:
    parser.add_argument('-gz', '--gzcompress', action='store_true', required=False, help='Compress backup files by gz.')

   
    # 解析参数:
    args = parser.parse_args()

    print('解析完参数:',args)
    print('类型:',type(args))
    args.outfile='take a set'

    # 打印参数:
    print('parsed args:')
    print(f'outfile = {
      
      args.outfile}')
    print(f'host = {
      
      args.host}')
    print(f'port = {
      
      args.port}')
    print(f'user = {
      
      args.user}')
    print(f'password = {
      
      args.password}')
    print(f'database = {
      
      args.database}')
    print(f'gzcompress = {
      
      args.gzcompress}')

if __name__ == '__main__':
    main()
# $ ./backup.py -u root -p hello --database testdb backup.sql

参考: https: // blog.csdn.net / RudeTomatoes / artigo / detalhes / 117003291
https: // zhuanlan.zhihu.com / p / 56922793

Acho que você gosta

Origin blog.csdn.net/weixin_44986037/article/details/131368352
Recomendado
Clasificación