পাইথন আরগপার্স কমান্ড লাইনটি যুক্তি ছাড়াই পতাকা প্রদর্শন করে


345

আমি কীভাবে আমার কমান্ড লাইন টিপে alচ্ছিক পতাকা যুক্ত করব?

যেমন। তাই আমি লিখতে পারি

python myprog.py 

অথবা

python myprog.py -w

আমি চেষ্টা করেছিলাম

parser.add_argument('-w')

তবে আমি এই বলে একটি ত্রুটি বার্তা পেয়েছি

Usage [-w W]
error: argument -w: expected one argument

যা আমি গ্রহণ করি তার অর্থ এটি -W বিকল্পের জন্য একটি আর্গুমেন্ট মান চায়। শুধু একটি পতাকা গ্রহণের উপায় কী?

আমি http://docs.python.org/library/argparse.html এই প্রশ্নের পরিবর্তে অস্বচ্ছ খুঁজছি


4
আপনি যদি আপনার স্ক্রিপ্টে কেবল 1 টি পতাকা চান তবে sys.argv পুরোপুরি সহজ হবে। আপনার বিশেষভাবে আরগপার্স শেখার চেষ্টা না করা থাকলে এটি একটি ভাল কারণ এটি জানার পক্ষে একটি সহজ মডিউল।
chown

2
আমি এখন উত্তরটি জানার পরেও ডকুমেন্টেশন থেকে কীভাবে এটি বুঝতে পারি তা আমি দেখতে পাচ্ছি না।
আন্দ্রেয়াস হাফবার্গ

উত্তর:


532

আপনার কাছে যেমন আছে, আর্গুমেন্ট w কমান্ড লাইনে -w পরে একটি মান আশা করে। আপনি যদি কেবল একটি ভেরিয়েবল সেট করে একটি স্যুইচ ফ্লিপ করতে দেখেন Trueবা http://docs.python.org/dev/library/argparse.html#action (বিশেষত store_true এবং store_false) দেখুনFalse

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-w', action='store_true')

যেখানে action='store_true'বোঝা default=False

বিপরীতে, আপনি থাকতে পারে action='store_false', যা বোঝায় default=True


3
@ জডোগ, কেন এটি আমার পক্ষে কার্যকর হয় না তার কোনও ধারণা? wসর্বদা False
আইলিয়ান ওনোফ্রেই

52

এটি কার্যকর করার জন্য প্রস্তুত থাকতে একটি দ্রুত স্নিপেট যুক্ত করা হচ্ছে:

সূত্র: myparser.py

import argparse
parser = argparse.ArgumentParser(description="Flip a switch by setting a flag")
parser.add_argument('-w', action='store_true')

args = parser.parse_args()
print args.w

ব্যবহার:

python myparser.py -w
>> True

-10

এটি করার জন্য এখানে একটি দ্রুত উপায়, এর বাইরে আর কিছু লাগবে না sys.. যদিও কার্যকারিতা সীমাবদ্ধ:

flag = "--flag" in sys.argv[1:]

[1:] যদি পুরো ফাইলের নাম হয় --flag


13
এটি কীভাবে BAD এর ধারণাটি দীর্ঘকালীন তা প্রকাশ করতে কেবল লগইন করেছেন। ভাবুন যে আপনি "--flag" স্ট্রিংটি sys.argv এ আছে কিনা তা পরীক্ষা করেই শুরু করে দিয়েছেন। তারপরে আপনি কোন ফাইলটি খুলতে হবে তা দেখতে sys.argv [-1] এর শেষে দেখুন। হঠাৎ করেই আপনি এমন পরিস্থিতির সাথে সমাপ্ত হন যেখানে আপনি নামের একটি ফাইল খোলার চেষ্টা করেন --flag, তবে এটি অপ্রত্যাশিতভাবে আচরণ করবে এবং সবচেয়ে খারাপ এটি হ'ল এটি যখন প্রায়শই অবিশ্বস্ত ডেটা শেষ হয়ে যায় তখন রাস্তাটি সুরক্ষার ত্রুটিযুক্ত হয়ে যায় is argv পাস। শেষ পর্যন্ত, এই পদ্ধতিটি ঠিক করা উচিত নয়। রিয়েল আরগ পার্সারগুলি আরও বেশি শক্তিশালী ...
টাইমথেলিয়ন

3
উল্লিখিত হিসাবে, এই সমাধানটি মোটেও দৃust় নয়, তবে আপনার যদি দ্রুত এটি সম্পন্ন করা প্রয়োজন (যেমন পরীক্ষার উদ্দেশ্যে) প্রয়োজন হয় তবে এটি কাজ করে। অবশ্যই এটি উত্পাদন কোড থেকে দূরে রাখুন।
জোনাথন সুদিয়ামান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.