टी एल; डॉ
nargs
विकल्प या विकल्प की 'append'
सेटिंग का उपयोग करें action
(यह निर्भर करता है कि आप उपयोगकर्ता इंटरफ़ेस को कैसे व्यवहार करना चाहते हैं)।
nargs
parser.add_argument('-l','--list', nargs='+', help='<Required> Set flag', required=True)
# Use like:
# python arg.py -l 1234 2345 3456 4567
nargs='+'
1 या अधिक तर्क nargs='*'
लेता है , शून्य या अधिक लेता है।
संलग्न
parser.add_argument('-l','--list', action='append', help='<Required> Set flag', required=True)
# Use like:
# python arg.py -l 1234 -l 2345 -l 3456 -l 4567
साथ append
उपलब्ध कराने का विकल्प कई बार सूची का निर्माण करने के।
उपयोग न करें type=list
!!! - शायद ऐसी कोई स्थिति नहीं है, जहां आप इसके type=list
साथ उपयोग करना चाहते हैं argparse
। कभी।
आइए कुछ अलग-अलग तरीकों पर अधिक विस्तार से एक नज़र डालते हैं जो एक ऐसा करने की कोशिश कर सकते हैं, और अंतिम परिणाम।
import argparse
parser = argparse.ArgumentParser()
# By default it will fail with multiple arguments.
parser.add_argument('--default')
# Telling the type to be a list will also fail for multiple arguments,
# but give incorrect results for a single argument.
parser.add_argument('--list-type', type=list)
# This will allow you to provide multiple arguments, but you will get
# a list of lists which is not desired.
parser.add_argument('--list-type-nargs', type=list, nargs='+')
# This is the correct way to handle accepting multiple arguments.
# '+' == 1 or more.
# '*' == 0 or more.
# '?' == 0 or 1.
# An int is an explicit number of arguments to accept.
parser.add_argument('--nargs', nargs='+')
# To make the input integers
parser.add_argument('--nargs-int-type', nargs='+', type=int)
# An alternate way to accept multiple inputs, but you must
# provide the flag once per input. Of course, you can use
# type=int here if you want.
parser.add_argument('--append-action', action='append')
# To show the results of the given option to screen.
for _, value in parser.parse_args()._get_kwargs():
if value is not None:
print(value)
यहां वह आउटपुट है जिसकी आप अपेक्षा कर सकते हैं:
$ python arg.py --default 1234 2345 3456 4567
...
arg.py: error: unrecognized arguments: 2345 3456 4567
$ python arg.py --list-type 1234 2345 3456 4567
...
arg.py: error: unrecognized arguments: 2345 3456 4567
$ # Quotes won't help here...
$ python arg.py --list-type "1234 2345 3456 4567"
['1', '2', '3', '4', ' ', '2', '3', '4', '5', ' ', '3', '4', '5', '6', ' ', '4', '5', '6', '7']
$ python arg.py --list-type-nargs 1234 2345 3456 4567
[['1', '2', '3', '4'], ['2', '3', '4', '5'], ['3', '4', '5', '6'], ['4', '5', '6', '7']]
$ python arg.py --nargs 1234 2345 3456 4567
['1234', '2345', '3456', '4567']
$ python arg.py --nargs-int-type 1234 2345 3456 4567
[1234, 2345, 3456, 4567]
$ # Negative numbers are handled perfectly fine out of the box.
$ python arg.py --nargs-int-type -1234 2345 -3456 4567
[-1234, 2345, -3456, 4567]
$ python arg.py --append-action 1234 --append-action 2345 --append-action 3456 --append-action 4567
['1234', '2345', '3456', '4567']
तकिए :
- का उपयोग करें
nargs
याaction='append'
nargs
एक उपयोगकर्ता के दृष्टिकोण से अधिक सीधा हो सकता है, लेकिन यह अनपेक्षित हो सकता है यदि स्थिति संबंधी तर्क हैं क्योंकि argparse
यह नहीं बता सकता है कि क्या स्थितिगत तर्क होना चाहिए और क्या होना चाहिए nargs
; यदि आपके पास स्थिति-संबंधी तर्क हैं, तो action='append'
एक बेहतर विकल्प होने का अंत हो सकता है।
- अगर इसके बाद के संस्करण सच ही है
nargs
दिया जाता है '*'
, '+'
या '?'
। यदि आप एक पूर्णांक संख्या (जैसे 4
) प्रदान करते हैं, तो विकल्प nargs
और स्थिति संबंधी तर्कों के साथ मिश्रण करने में कोई समस्या नहीं argparse
होगी क्योंकि विकल्प के लिए उम्मीद करने के लिए वास्तव में कितने मान होंगे।
- कमांड लाइन 1 पर उद्धरणों का उपयोग न करें
- उपयोग न करें
type=list
, क्योंकि यह सूचियों की एक सूची लौटाएगा
- ऐसा इसलिए होता है क्योंकि हुड के तहत आपके द्वारा चुने गए प्रत्येक व्यक्ति के तर्क को स्वीकार करने
argparse
के type
लिए आप सभी तर्कों का समुच्चय नहीं करते हैं।type
- आप
type=int
(या जो भी) का उपयोग कर सकते हैं सूची की सूची (या जो कुछ भी)
1 : मैं सामान्य रूप से मतलब नहीं है .. मेरा मतलब है कि एक सूची पासargparse
करने के लिए उद्धरणों का उपयोग करना वह नहीं है जो आप चाहते हैं।