Python argparse: nilai default atau nilai yang ditentukan


174

Saya ingin memiliki argumen opsional yang akan default ke nilai jika hanya ada bendera tanpa nilai yang ditentukan, tetapi menyimpan nilai yang ditentukan pengguna alih-alih default jika pengguna menentukan nilai. Apakah sudah ada tindakan untuk ini?

Sebuah contoh:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

Saya dapat membuat tindakan, tetapi ingin melihat apakah ada cara yang ada untuk melakukan ini.

Jawaban:


273
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' berarti argumen 0-atau-1
  • const=1 set default ketika ada 0 argumen
  • type=int mengubah argumen menjadi int

Jika Anda ingin test.pymengatur exampleke 1 meskipun tidak ada --exampleyang ditentukan, maka sertakan default=1. Yaitu dengan

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

kemudian

% test.py 
Namespace(example=1)

Bagaimana melakukan ini dengan string? Saya memiliki dilema dengan diferensiasi "" (string kosong sebagai default) dan "" (string kosong seperti yang dimasukkan oleh pengguna). Dalam kode untuk saat ini saya menggunakan default dan karena saya perlu melakukan beberapa operasi, saya memiliki sesuatu seperti ini self.foo = (args.bar or some_else_source).upper(). Ini akan pecah pada Tidak ada objek AFAIUC.
0andriy

16

Sebenarnya, Anda hanya perlu menggunakan defaultargumen add_argumentseperti pada test.pyskrip ini :

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

Detailnya ada di sini .


7

Perbedaan antara:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

dan

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

dengan demikian:

myscript.py => debug adalah 7 (dari default) dalam kasus pertama dan "Tidak ada" di yang kedua

myscript.py --debug => debug adalah 1 dalam setiap kasus

myscript.py --debug 2 => debug adalah 2 dalam setiap kasus

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.