पायथॉन एर्गपर्स: डिफ़ॉल्ट मूल्य या निर्दिष्ट मूल्य


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 या or-1 तर्कों का अर्थ है
  • const=1 0 तर्क होने पर डिफ़ॉल्ट सेट करता है
  • type=int तर्क को अंतर में परिवर्तित करता है

यदि आप 1 test.pyको सेट करना चाहते हैं, exampleभले ही कोई --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 पर किसी भी वस्तु पर टूट जाएगा।
--ंद्री

16

वास्तव में, आपको केवल इस स्क्रिप्ट में defaultतर्क का उपयोग करने की आवश्यकता है :add_argumenttest.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 => डिबग पहले मामले में 7 (डिफ़ॉल्ट रूप से) और दूसरे में "कोई नहीं" है

myscript.py --debug => डिबग प्रत्येक मामले में 1 है

myscript.py --debug 2 => डिबग प्रत्येक मामले में 2 है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.