Python argparse: ค่าเริ่มต้นหรือค่าที่ระบุ


174

ฉันต้องการมีอาร์กิวเมนต์ที่เป็นทางเลือกซึ่งจะใช้ค่าเริ่มต้นหากมีการตั้งค่าสถานะเท่านั้นโดยไม่มีการระบุค่า แต่เก็บค่าที่ผู้ใช้ระบุแทนค่าเริ่มต้นหากผู้ใช้ระบุค่า มีการดำเนินการนี้หรือไม่

ตัวอย่าง:

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

ฉันสามารถสร้างการกระทำ แต่ต้องการดูว่ามีวิธีการที่มีอยู่หรือไม่

คำตอบ:


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='?' หมายถึงอาร์กิวเมนต์ 0 หรือ 1
  • const=1 ตั้งค่าเริ่มต้นเมื่อมี 0 ข้อโต้แย้ง
  • type=int แปลงอาร์กิวเมนต์เป็น int

หากคุณต้องการtest.pyที่จะตั้งexample1 แม้ว่าจะไม่มีการ--exampleระบุแล้ว default=1ได้แก่ นั่นคือด้วย

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

แล้วก็

% test.py 
Namespace(example=1)

วิธีการทำเช่นนี้กับสตริง? ฉันมีปัญหากับความแตกต่างของ "" (สตริงว่างเปล่าเป็นค่าเริ่มต้น) และ "" (สตริงว่างตามที่ผู้ใช้ป้อน) self.foo = (args.bar or some_else_source).upper()ในรหัสสำหรับตอนนี้ผมใช้เริ่มต้นและตั้งแต่ที่ฉันต้องทำปฏิบัติการบางอย่างผมมีบางอย่างเช่นนี้ มันจะทำลายไม่มีวัตถุ AFAIUC
0andriy

16

ที่จริงแล้วคุณเพียงแค่ใช้defaultอาร์กิวเมนต์add_argumentเป็นเช่นเดียวกับในtest.pyสคริปต์นี้:

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

โดยมีรายละเอียดที่นี่


7

ความแตกต่างระหว่าง:

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

และ

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

คือ:

myscript.py => debug คือ 7 (จากค่าเริ่มต้น) ในกรณีแรกและ "ไม่มี" ในครั้งที่สอง

myscript.py --debug => debug คือ 1 ในแต่ละกรณี

myscript.py --debug 2 => debug คือ 2 ในแต่ละกรณี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.