সাধারণ আরগপারস উদাহরণ চাইছিল: 1 টি যুক্তি, 3 ফলাফল


529

ডকুমেন্টেশন জন্য argparse পাইথন মডিউল জন্য আমার ক্ষুদ্র শিক্ষানবিস মস্তিষ্ক ডান এখন উপলব্ধি করতে, যখন চমৎকার আমি নিশ্চিত, অত্যধিক হয়। কমান্ড লাইনে গণিত করার দরকার নেই বা স্ক্রিনে ফর্ম্যাটিং লাইনগুলি সহ বিকল্পের অক্ষর পরিবর্তন করতে হবে d আমি যা করতে চাই তা হ'ল "যদি আরগ এ হয় তবে এটি করুন, বি যদি তা করে, উপরের কেউ যদি সাহায্য না করে এবং প্রস্থান না করে"


15
তারপরে sys.argvআপনি যে যুক্তিটি চান তা
যাচাই করুন

10
কখনও প্ল্যাক চেষ্টা করেছেন ? দুর্দান্ত ডকুমেন্টেশন সহ আরগপার্সের ওপরে মোড়ক ব্যবহার করা সহজ ।
kirbyfan64sos

157
এটা তুমি না এটা আরগপারস। এটি আপনাকে তারকাদের ভ্রমণের দিকে নিয়ে যাওয়ার চেষ্টা করছে এবং আপনি কোথায় গেলেন সেদিকে খেয়াল নেই।
ফ্লোরিয়ান হিগল

11
ক্রেজি আবার "
পাইথোনিক

68
ক্ষুদ্র আরম্ভকারী মস্তিষ্কের জন্য যে কোনও জায়গায় দাঁড়ানোর জন্য আপনি ম্যাট উইলকিকে আশীর্বাদ করুন।
পোলকা

উত্তর:


255

মূল প্রশ্নটি সম্পর্কে আমার উপলব্ধি দ্বিগুণ। প্রথমত, সহজতম আরগপার্স উদাহরণের দিক থেকে আমি অবাক হয়েছি যে আমি এটি এখানে দেখিনি। অবশ্যই, মৃত-সরল হতে, এটি খুব সামান্য শক্তি সহ সমস্ত ওভারহেড, তবে এটি আপনাকে শুরু করতে পারে।

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("a")
args = parser.parse_args()

if args.a == 'magic.name':
    print 'You nailed it!'

তবে এই অবস্থানগত যুক্তি এখন প্রয়োজন। আপনি যদি এই প্রোগ্রামটি চালনার সময় এটি ছেড়ে দেন, আপনি অনুপস্থিত যুক্তি সম্পর্কে ত্রুটি পাবেন। এটি আমাকে মূল প্রশ্নের দ্বিতীয় অংশে নিয়ে যায়। ম্যাট উইলকি একটি একক চান বলে মনে হয় ঐচ্ছিক (--option লেবেল) একটি নামাঙ্কিত ট্যাগ ছাড়া যুক্তি। আমার পরামর্শ হ'ল উপরের কোডটি সংশোধন করতে হবে:

...
parser.add_argument("a", nargs='?', default="check_string_for_empty")
...
if args.a == 'check_string_for_empty':
    print 'I can tell that no argument was given and I can deal with that here.'
elif args.a == 'magic.name':
    print 'You nailed it!'
else:
    print args.a

আরও একটি মার্জিত সমাধান হতে পারে, তবে এটি কাজ করে এবং সংক্ষিপ্তবাদী।


4
কিছুটা প্রতিফলিত হওয়ার পরে, আমি এই প্রশ্নটি শেষ করে জিজ্ঞাসিত প্রশ্নাবলীর সর্বোত্তম উত্তর দিয়েছিলাম এবং সেই সময়কার পরিস্থিতি আমার মধ্যে ছিল। অন্যান্য দুর্দান্ত উত্তরগুলি তাদের যোগ্যতা প্রমাণের জন্য পর্যাপ্ত পরিমাণের চেয়ে বেশি সংগ্রহ করেছে এবং কিছুটা প্রতিযোগিতায় দাঁড়াতে পারে। :-)
ম্যাট উইলকি

@ ব্যাডনাক: এটি আপনি যা চান তা-ই, যা 'এ' প্রতিনিধিত্ব করে। যদি আপনি একটি যুক্তি, উদাহরণস্বরূপ একটি ফাইলের নাম আশা করেন তবে এটি হ'ল কমান্ড লাইনে ফাইলের নাম হিসাবে প্রবেশ করা হয়েছিল। এরপরে আপনি এটি ফাইল সিস্টেমের মধ্যে বিদ্যমান কিনা তা নির্ধারণের জন্য নিজস্ব প্রসেসিং করতে পারেন তবে এটি অন্য প্রশ্নোত্তর।
পয়সাটাইপ

363

আমি এখানে argparse(একাধিক আরোগুলি সহ) যেভাবে এটি করি :

parser = argparse.ArgumentParser(description='Description of your program')
parser.add_argument('-f','--foo', help='Description for foo argument', required=True)
parser.add_argument('-b','--bar', help='Description for bar argument', required=True)
args = vars(parser.parse_args())

args যুক্তিযুক্ত একটি অভিধান হবে:

if args['foo'] == 'Hello':
    # code here

if args['bar'] == 'World':
    # code here

আপনার ক্ষেত্রে কেবল একটি যুক্তি যুক্ত করুন।


3
যেমনটি অন্য উত্তরে আমার মন্তব্যে উল্লিখিত হয়েছে, আমি আরগপার্সের স্বয়ংক্রিয় সহায়তা ফর্ম্যাটিংটি রাখতে চাই, তবে অচেতনার যুক্তি থাকার বিকল্প নেই বলে মনে হয় (সম্ভবত আমি যখন এটি দেখি তখন এটি বুঝতে পারি না) ), উদাহরণস্বরূপ একটিকে করা foo.py --action installবা foo.py --action removeকেবল পরিবর্তে করা দরকারfoo.py install
matt wilkie

7
@mattwilkie তারপরে আপনাকে এ জাতীয় অবস্থানগত যুক্তিটি সংজ্ঞায়িত করতে হবে: parser.add_argument('install', help='Install the app') (লক্ষ্য করুন আপনি এর মাধ্যমে অবস্থানগত যুক্তির সংজ্ঞা দিতে পারবেন না required=True)
দিয়েগো নাভারো

32
আরগপার্স করার এক নুবি হিসাবে, এই উত্তরটি সত্যিই সহায়তা করেছিল কারণ সেগুলি পাস করার পরে আমি কোথায় বিকল্পগুলি খুঁজে পেতে পারি তা জানতাম না । অন্য কথায়, আমার বোঝার দরকার argsছিল উপরের মতো ডিকটি কীভাবে তৈরি হয়েছিল।
mrKelley

3
কমান্ড লাইন থেকে সরাসরি প্রোগ্রাম কল করার সময় 'শর্ট ফর্ম' এবং স্ক্রিপ্টের মধ্যে কোনও প্রোগ্রাম / কমান্ড চালানোর সময় 'দীর্ঘ ফর্ম' ব্যবহার করুন। সেক্ষেত্রে দীর্ঘ ফর্মের সাথে এটি আরও বেশি মানব পাঠযোগ্য এবং এইভাবে কোড / স্ক্রিপ্টের যুক্তি অনুসরণ করা সহজ।
ওলা

17
ব্যক্তিগতভাবে আমি অভিধান সিনট্যাক্সের পরিবর্তে args.fooএবং args.barপরিবর্তে যুক্তিগুলি অ্যাক্সেস করতে আরও ক্লিনার মনে করি । যে কোনও উপায়ে অবশ্যই ঠিক আছে, তবে আরগগুলি আসলে অভিধান নয় তবে একটি argparse.Namespaceঅবজেক্ট।
মাইকেল মায়ার

210

argparseডকুমেন্টেশন যুক্তিসঙ্গতভাবে ভাল কিন্তু আউট কয়েক দরকারী বিবরণ পাতা যা সুস্পষ্ট নাও হতে পারে। (@ ডিগো নাভারো ইতিমধ্যে এর কয়েকটি উল্লেখ করেছেন তবে আমি তার উত্তরে কিছুটা প্রসারিত করার চেষ্টা করব।) বুনিয়াদি ব্যবহার নিম্নরূপ:

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()

আপনি যে জিনিসটি থেকে ফিরে আসবেন parse_args()তা হ'ল 'নেমস্পেস' অবজেক্ট: এমন একটি অবজেক্ট যার সদস্য ভেরিয়েবলগুলি আপনার কমান্ড-লাইন আর্গুমেন্টের নামে নামকরণ করা হবে। Namespaceবস্তু কিভাবে আপনি আপনার আর্গুমেন্ট এবং তাদের সঙ্গে যুক্ত মান অ্যাক্সেস হল:

args = parser.parse_args()
print args.my_foo
print args.bar_value

(নোট করুন যে argparseভেরিয়েবলের নামকরণের সময় আপনার যুক্তির নামগুলিতে '-' এর পরিবর্তে আন্ডারস্কোর দিয়ে প্রতিস্থাপন করে))

অনেক পরিস্থিতিতে আপনি যুক্তিগুলি কেবল পতাকা হিসাবে ব্যবহার করতে চাইতে পারেন যা কোনও মূল্য দেয় না। আপনি এইগুলিতে আরগপার্সে যুক্ত করতে পারেন:

parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')

উপরেরটি যথাযথ মান সহ 'foo' এবং যথাক্রমে ফলস মান সহ 'no_foo' নামের ভেরিয়েবলগুলি তৈরি করবে:

if (args.foo):
    print "foo is true"

if (args.no_foo is False):
    print "nofoo is false"

একটি আর্গুমেন্ট যোগ করার সময় আপনি "প্রয়োজনীয়" বিকল্পটি ব্যবহার করতে পারেন তাও নোট করুন:

parser.add_argument('-o', '--output', required=True)

আপনি যদি কমান্ড লাইনে এই যুক্তিটি বাদ দেন তবে argparseআপনাকে বলবে যে এটি অনুপস্থিত এবং আপনার স্ক্রিপ্টটির সম্পাদন বন্ধ করবে।

পরিশেষে, নোট করুন যে varsফাংশনটি ব্যবহার করে আপনার যুক্তিগুলির একটি ডিক কাঠামো তৈরি করা সম্ভব , যদি এটি আপনার জন্য জীবন সহজ করে।

args = parser.parse_args()
argsdict = vars(args)
print argsdict['my_foo']
print argsdict['bar_value']

আপনি দেখতে পাচ্ছেন, varsআপনার যুক্তির নামগুলি কী হিসাবে এবং এর মানগুলি, এর, মান হিসাবে একটি ডিক প্রদান করে।

আপনি করতে পারেন এমন প্রচুর অপশন এবং জিনিস রয়েছে তবে এটিতে সর্বাধিক প্রয়োজনীয়, সাধারণ ব্যবহারের দৃশ্যগুলি আবরণ করা উচিত।


3
কীসের কথা '-f'এবং '-b'? আপনি এটাকে বাদ দিতে পারবেন না কেন?
ব্যবহারকারী 2763361

13
প্রতিটি রানটাইম বিকল্পের জন্য একটি 'শর্ট ফর্ম' (একটি ড্যাশ) এবং 'লং ফর্ম' (দুটি ড্যাশ) সংস্করণ উভয়ই রাখা প্রচলিত। আপনি এটি দেখতে পাবেন, উদাহরণস্বরূপ, প্রায় প্রতিটি স্ট্যান্ডার্ড ইউনিক্স / লিনাক্স ইউটিলিটিতে; কি করে man cpবা man lsএবং আপনি বুঝতে পারবেন, অনেক অপশন উভয় স্বাদে (যেমন আসা -f, --force)। লোকেরা কেন একে অপরকে পছন্দ করে সে কারণেই সম্ভবত বিবিধ কারণ রয়েছে, তবে কোনও ক্ষেত্রেই আপনার প্রোগ্রামে উভয় ফর্ম উপলব্ধ করা বেশ মানসম্পন্ন।
ডিএমএইচ

59

ম্যাট আরগপার্সে অবস্থানগত পরামিতি সম্পর্কে জিজ্ঞাসা করছে, এবং আমি সম্মত হই যে পাইথন ডকুমেন্টেশন এই দিকটিতে অভাব রয়েছে। ~ 20 টি বিজোড় পৃষ্ঠাগুলিতে কোনও একক, সম্পূর্ণ উদাহরণ নেই যা অবস্থানগত পরামিতিগুলি পার্সিং এবং ব্যবহার উভয়ই দেখায় ।

এখানে অন্য উত্তরগুলির মধ্যে কোনওটিই পজিশনাল প্যারামিটারগুলির একটি সম্পূর্ণ উদাহরণ দেখায় না, তাই এখানে একটি সম্পূর্ণ উদাহরণ রয়েছে:

# tested with python 2.7.1
import argparse

parser = argparse.ArgumentParser(description="An argparse example")

parser.add_argument('action', help='The action to take (e.g. install, remove, etc.)')
parser.add_argument('foo-bar', help='Hyphens are cumbersome in positional arguments')

args = parser.parse_args()

if args.action == "install":
    print("You asked for installation")
else:
    print("You asked for something other than installation")

# The following do not work:
# print(args.foo-bar)
# print(args.foo_bar)

# But this works:
print(getattr(args, 'foo-bar'))

যে জিনিসটি আমাকে ফেলে দিয়েছিল তা হ'ল আরগপারস নামক যুক্তি "--ফু-বার" কে "foo_bar" তে রূপান্তরিত করবে, তবে "ফু-বার" নামের একটি অবস্থানগত প্যারামিটার "ফু-বার" হিসাবে থাকবে, কীভাবে এটি কম স্পষ্টভাবে তৈরি করবে আপনার প্রোগ্রামে এটি ব্যবহার করুন।

আমার উদাহরণের শেষে দুটি লাইন লক্ষ্য করুন - এর মধ্যে দু'টিই ফু-বার অবস্থানিক প্যারামের মান পেতে কাজ করবে না। প্রথমটি স্পষ্টতই ভুল (এটি একটি গাণিতিক এক্সপ্রেশন args.foo বিয়োগ বার), তবে দ্বিতীয়টিটিও কাজ করে না:

AttributeError: 'Namespace' object has no attribute 'foo_bar'

আপনি যদি foo-barবৈশিষ্ট্যটি ব্যবহার করতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে getattr, যেমনটি আমার উদাহরণের শেষ লাইনে দেখা গেছে। পাগলটি হ'ল আপনি যদি dest=foo_barসম্পত্তিটির নামটি অ্যাক্সেস করা সহজতর কিছুতে ব্যবহার করার চেষ্টা করেন , আপনি সত্যিই উদ্ভট ত্রুটি বার্তাটি পাবেন:

ValueError: dest supplied twice for positional argument

উপরের উদাহরণটি কীভাবে চলে তা এখানে দেখুন:

$ python test.py
usage: test.py [-h] action foo-bar
test.py: error: too few arguments

$ python test.py -h
usage: test.py [-h] action foo-bar

An argparse example

positional arguments:
  action      The action to take (e.g. install, remove, etc.)
  foo-bar     Hyphens are cumbersome in positional arguments

optional arguments:
  -h, --help  show this help message and exit

$ python test.py install foo
You asked for installation
foo

5
nargs='?'একটি "ঐচ্ছিক অবস্থানগত" জন্য জাদুমন্ত্র অনুযায়ী হয় stackoverflow.com/questions/4480075/...
MarkHu

কোনও অবস্থানগত foo-barরূপান্তরিত হয় না এই বিষয়টি bugs.python.org/issue15125 এfoo_bar সম্বোধন করা হয় ।
hpaulj

2
আমি মনে করি এই বাগের জন্য সহজ কাজটি হ'ল "ফু-বার" এর পরিবর্তে "foo_bar" আর্গুমেন্টটি কল করা, তারপরে print args.foo_barকাজ করে। যেহেতু এটি একটি অবস্থানগত যুক্তি, স্ক্রিপ্ট কল করার সময় আপনাকে নামটি নির্দিষ্ট করতে হবে না, তাই এটি ব্যবহারকারীর পক্ষে কোনও বিষয় নয়।
লুয়েটর

@ লিউটার আপনি ঠিক বলেছেন, তর্কটির নামকরণ করা সহজ, তবে বাগ রিপোর্টটির লেখক একটি ভাল মামলা করেছেন যে এটি এখনও অপ্রয়োজনীয় জ্ঞানীয় বোঝার কারণে অপব্যবহার ature আরগপার্স ব্যবহার করার সময়, অবশ্যই বিকল্পগুলি এবং যুক্তিগুলির জন্য বিভিন্ন নামকরণের কনভেনশনগুলিকে বিরতি দিতে হবে এবং পুনরুদ্ধার করতে হবে। Bugs.python.org/msg164968 দেখুন ।
মার্ক ই। হাজেস

1
@ মেহাসে আমি সম্পূর্ণরূপে সম্মতি জানাই যে এটি একটি ভুল বৈশিষ্ট্য যা ঠিক করা উচিত। আমি কেবলমাত্র যুক্তিটির নামকরণ করা ব্যবহারের চেয়ে সহজ এবং কম বিভ্রান্তিকর কাজ বলে মনে করি getattr(এটি আরও নমনীয় কারণ এটি আপনাকে মানটি ব্যবহার করে এমন কোডটি পরিবর্তন না করে alচ্ছিক থেকে পজিশনাল একটি যুক্তি পরিবর্তন করতে দেয়)।
luator

22

তবুও এই পোস্টটি দ্বারা অনুপ্রাণিত আরেকটি সংক্ষিপ্ত ভূমিকা ।

import argparse

# define functions, classes, etc.

# executes when your script is called from the command-line
if __name__ == "__main__":

    parser = argparse.ArgumentParser()
    #
    # define each option with: parser.add_argument
    #
    args = parser.parse_args() # automatically looks at sys.argv
    #
    # access results with: args.argumentName
    #

নিম্নলিখিতগুলির সংমিশ্রণগুলির সাথে যুক্তিগুলি সংজ্ঞায়িত করা হয়:

parser.add_argument( 'name', options... )              # positional argument
parser.add_argument( '-x', options... )                # single-char flag
parser.add_argument( '-x', '--long-name', options... ) # flag with long name

সাধারণ বিকল্পগুলি হ'ল:

  • সহায়তা : --helpব্যবহৃত হয় যখন এই আরগের জন্য বিবরণ ।
  • ডিফল্ট : আরগ বাদ দিলে ডিফল্ট মান।
  • প্রকার : আপনি যদি একটি floatবা int(অন্যথায় হয় str) আশা করেন ।
  • ভাগ্য : একটি পতাকাকে আলাদা নাম দিন (যেমন '-x', '--long-name', dest='longName')।
    দ্রষ্টব্য: ডিফল্টরূপে এর --long-nameসাথে অ্যাক্সেস করা হয়args.long_name
  • ক্রিয়া : নির্দিষ্ট যুক্তিগুলির বিশেষ পরিচালনা করার জন্য
    • store_true, store_false: বুলিয়ান আরগ্সের জন্য
      '--foo', action='store_true' => args.foo == True
    • store_const: বিকল্পের সাথে ব্যবহার করাconst
      '--foo', action='store_const', const=42 => args.foo == 42
    • count: হিসাবে পুনরাবৃত্তি বিকল্পের জন্য./myscript.py -vv
      '-v', action='count' => args.v == 2
    • append: হিসাবে পুনরাবৃত্তি বিকল্পের জন্য./myscript.py --foo 1 --foo 2
      '--foo', action='append' => args.foo == ['1', '2']
  • প্রয়োজনীয় : যদি একটি পতাকা প্রয়োজন হয়, বা অবস্থানগত আর্গুমেন্ট না হয়।
  • শক্তিশালী : এন আরগস ক্যাপচার জন্য একটি পতাকা জন্য
    ./myscript.py --foo a b => args.foo = ['a', 'b']
  • পছন্দসমূহ : সম্ভাব্য ইনপুটগুলিকে সীমাবদ্ধ করতে (স্ট্রিংগুলির তালিকা হিসাবে নির্দিষ্ট করুন বা যদি ints type=int)।

12

উল্লেখ্য Argparse টিউটোরিয়াল মধ্যে পাইথন HOWTOs । এটি এর মতো বেশিরভাগ মৌলিক উদাহরণ থেকে শুরু হয়:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
args = parser.parse_args()
print(args.square**2)

এবং কম বুনিয়াদীতে অগ্রগতি হয়।

একটি বিকল্পের জন্য পূর্বনির্ধারিত পছন্দ সহ একটি উদাহরণ রয়েছে, যেমন জিজ্ঞাসা করা হয়েছে তার মতো:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

দস্তাবেজগুলি আপডেট হয়েছে তা দেখে ভাল লাগল। আমি আপনাকে আশ্বাস দিচ্ছি যে 5 বছর আগে ওপি যখন প্রশ্ন পোস্ট করেছিল তখন এটি ছিল না।
ntwrkguru

10

আমি আমার শিক্ষণ প্রকল্পে যা এলাম তা মূলত @ ডিএমএইচকে ধন্যবাদ ...

ডেমো কোড:

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-f', '--flag', action='store_true', default=False)  # can 'store_false' for no-xxx flags
    parser.add_argument('-r', '--reqd', required=True)
    parser.add_argument('-o', '--opt', default='fallback')
    parser.add_argument('arg', nargs='*') # use '+' for 1 or more args (instead of 0 or more)
    parsed = parser.parse_args()
    # NOTE: args with '-' have it replaced with '_'
    print('Result:',  vars(parsed))
    print('parsed.reqd:', parsed.reqd)

if __name__ == "__main__":
    main()

এটি বিকশিত হয়ে থাকতে পারে এবং অনলাইনে উপলভ্য হতে পারে: কমান্ড-লাইন pyপি

এই কোডটি একটি ওয়ার্কআউট দেওয়ার জন্য স্ক্রিপ্ট: কমান্ড-line-demo.sh


2
অবশেষে একটি আরগপার্স উদাহরণ যা অর্থ দেয়
opentokix

5

আপনি প্ল্যাক (চারপাশে একটি মোড়ক argparse) ব্যবহার করতে পারেন ।

বোনাস হিসাবে এটি ঝরঝরে সহায়তা নির্দেশাবলী উত্পন্ন করে - নীচে দেখুন।

উদাহরণ লিপি:

#!/usr/bin/env python3
def main(
    arg: ('Argument with two possible values', 'positional', None, None, ['A', 'B'])
):
    """General help for application"""
    if arg == 'A':
        print("Argument has value A")
    elif arg == 'B':
        print("Argument has value B")

if __name__ == '__main__':
    import plac
    plac.call(main)

উদাহরণ আউটপুট:

কোনও যুক্তি সরবরাহ করা হয়নি - example.py :

usage: example.py [-h] {A,B}
example.py: error: the following arguments are required: arg

অপ্রত্যাশিত যুক্তি সরবরাহকৃত - example.py C :

usage: example.py [-h] {A,B}
example.py: error: argument arg: invalid choice: 'C' (choose from 'A', 'B')

সঠিক যুক্তি সরবরাহ করা হয়েছে example.py A ::

Argument has value A

সম্পূর্ণ সহায়তা মেনু (স্বয়ংক্রিয়ভাবে উত্পন্ন) - example.py -h :

usage: example.py [-h] {A,B}

General help for application

positional arguments:
  {A,B}       Argument with two possible values

optional arguments:
  -h, --help  show this help message and exit

সংক্ষিপ্ত ব্যাখ্যা:

আর্গুমেন্টের নামটি সাধারণত প্যারামিটারের নাম ( arg) এর সমান হয় ।

argপ্যারামিটারের পরে টিপল টীকাটির নীচের অর্থ রয়েছে:

  • বর্ণনা ( Argument with two possible values)
  • যুক্তির ধরণ - 'পতাকা', 'বিকল্প' বা 'অবস্থানিক' এর একটি ( positional)
  • সংক্ষিপ্তসার ( None)
  • যুক্তির মানের ধরণ - যেমন eg ভাসা, স্ট্রিং ( None)
  • পছন্দসইগুলির সীমাবদ্ধ সেট ( ['A', 'B'])

ডকুমেন্টেশন:

প্ল্যাক ব্যবহার সম্পর্কে আরও শিখতে এর দুর্দান্ত ডকুমেন্টেশনটি পরীক্ষা করে দেখুন:

প্ল্যাক: কমান্ড লাইনটিকে সহজ উপায়ে পার্স করা


4

অন্যরা যা বলেছে তাতে যুক্ত করতে:

আমি সাধারণত একটি পরিবর্তনশীল নাম নির্দিষ্ট করতে 'ডেসট' প্যারামিটারটি ব্যবহার করতে চাই এবং তারপরে গ্লোবাল নেমস্পেসে এই পরিবর্তনগুলি রাখতে 'গ্লোবাল ()। আপডেট ()' ব্যবহার করি।

ব্যবহার:

$ python script.py -i "Hello, World!"

কোড:

...
parser.add_argument('-i', '--input', ..., dest='inputted_variable',...)
globals().update(vars(parser.parse_args()))
...
print(inputted_variable) # Prints "Hello, World!"

অভ্যন্তরীণভাবে নেমস্পেসে মানগুলি অ্যাক্সেস করতে এবং argparseব্যবহার করতে। এইভাবে এটি অদ্ভুতভাবে গঠিত মানগুলি দ্বারা বিরক্ত হয় না । getattrsetattrdest
hpaulj

1

আরগপার্স ব্যবহার করার এবং '-h' / '--help' স্যুইচগুলি সংশোধন করার একটি নিজস্ব সহজ উপায় হ'ল ফলসটিতে ডিফল্ট সহায়তা নির্ধারণ করা, আপনি নিজের পছন্দমতো অতিরিক্ত .add_arguments যুক্ত করতে পারেন :

import argparse

parser = argparse.ArgumentParser(add_help=False)

parser.add_argument('-h', '--help', action='help',
                help='To run this script please provide two arguments')
parser.parse_args()

রান: অজগর পরীক্ষা.পি-এইচ

আউটপুট:

usage: test.py [-h]

optional arguments:
  -h, --help  To run this script please provide two arguments

-1

সহজ উত্তর!

পিএস যিনি আরগপার্সের ডকুমেন্ট লিখেছেন তা বোকা

অজগর কোড:

import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--o_dct_fname',type=str)
parser.add_argument('--tp',type=str)
parser.add_argument('--new_res_set',type=int)
args = parser.parse_args()
o_dct_fname = args.o_dct_fname
tp = args.tp
new_res_set = args.new_res_set

চলমান কোড

python produce_result.py --o_dct_fname o_dct --tp father_child --new_res_set 1

এই উত্তরটি বিদ্যমান উত্তরের চেয়ে নতুন / আলাদা কিছু যুক্ত করে না।
এনভিএস অভিলাষ

আমি পরিষ্কার, কথাটি সস্তা, কোডটি দেখান
গৌসুট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.