โมดูล argparse วิธีการเพิ่มตัวเลือกโดยไม่มีข้อโต้แย้งใด ๆ ?


165

argparseผมได้สร้างสคริปต์ใช้

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

args ที่จะส่งผ่าน: หรือ./script -f config_file -s./script -f config_file

มันก็โอเคสำหรับส่วน -f config_file แต่มันขอให้ฉันหาข้อโต้แย้งสำหรับ -s ซึ่งเป็น optionnal และไม่ควรตามมาด้วย

ฉันได้ลองสิ่งนี้แล้ว:

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file')
#parser.add_argument('-s', '--simulate', nargs = '0')
args = parser.parse_args()
if args.file:
    config_file = args.file
if args.set_in_prod:
        simulate = True
else:
    pass

ด้วยข้อผิดพลาดดังต่อไปนี้:

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'

และ errror เดียวกันกับการแทน''0

คำตอบ:



97

ในการสร้างตัวเลือกที่ต้องการไม่มีค่าตั้งค่าaction [เอกสาร]ของมัน'store_const', หรือ'store_true''store_false'

ตัวอย่าง:

parser.add_argument('-s', '--simulate', action='store_true')

สวัสดีขอขอบคุณสำหรับคำตอบของคุณ ฉันได้ลองตามที่อธิบายไว้ในเอกสาร: >>> parser.add_argument ('- foo', '-f', action = 'store_true') _StoreTrueAction (option_strings = ['- foo', '-f'], dest = 'foo', nargs = 0, const = True, default = False, พิมพ์ = None, ตัวเลือก = none, help = None, metavar = None) >>> parser.parse_args () Namespace (foo = False) >> > print args.foo Traceback (การโทรล่าสุดครั้งล่าสุด): ไฟล์ "<stdin>", บรรทัดที่ 1 ใน <module> AttributeError: วัตถุ 'Namespace' ไม่มีแอตทริบิวต์ 'foo' >>> `นี่ดูเหมือนจะไม่ทำงาน ฉันไม่รู้วิธีเรียกคืนค่าหลังจากกำหนด ขอบคุณทีช่วยฉัน!
philippe

@philippe: คุณลืมผูกparser.parse_args()ค่าที่ส่งคืนไปยังargs stackoverflow.com/questions/5262702/ …
jfs

@philippe: args = parser.parse_args()ตามที่คุณมีอยู่ในรหัสของคุณ args.simulateคุณเพียงแค่ต้องเปลี่ยนสายการแสดงความคิดเห็นและจากนั้นคุณสามารถเข้าถึงค่าด้วย
เฟลิกซ์คลิง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.