আমি মূলত একজন সি প্রোগ্রামার। আমি বিভিন্ন কৌশল এবং "হ্যাক" বিভিন্ন যুক্তি পড়তে দেখেছি।
পাইথন প্রোগ্রামাররা এটি করতে পারে এমন কয়েকটি উপায় কী কী?
আমি মূলত একজন সি প্রোগ্রামার। আমি বিভিন্ন কৌশল এবং "হ্যাক" বিভিন্ন যুক্তি পড়তে দেখেছি।
পাইথন প্রোগ্রামাররা এটি করতে পারে এমন কয়েকটি উপায় কী কী?
উত্তর:
স্ট্যান্ডার্ড লাইব্রেরিতে মূল সমাধানটি হ'ল argparse
( ডক্স ):
এখানে একটি উদাহরণ:
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
args = parser.parse_args()
argparse
সমর্থন (অন্যান্য জিনিসগুলির মধ্যে):
optparse
অবহেলিত, প্রশ্নটির প্রশ্নকারী এখন আর স্ট্যাক ওভারফ্লোতে সদস্য নয় এবং এটি একটি অত্যন্ত দৃশ্যমান প্রশ্নের স্বীকৃত উত্তর - দয়া করে argparse
পরিবর্তে আপনার stdlib ব্যবহারের জন্য উদাহরণ কোডটি পুনরায় লেখার বিষয়টি বিবেচনা করুন।
import sys
print("\n".join(sys.argv))
sys.argv
কমান্ড লাইনের স্ক্রিপ্টে দেওয়া সমস্ত আর্গুমেন্ট ধারণ করে এমন একটি তালিকা।
মূলত,
import sys
print(sys.argv[1:])
sys.argv[1:]
(স্ক্রিপ্টের নামটি এড়ানো হয়)।
আরগপার্সের জন্য কেবল সুসমাচার প্রচারের কাছাকাছি যা এই কারণগুলির জন্য ভাল better মূলত:
(লিঙ্ক থেকে অনুলিপি করা)
আরগপার্স মডিউল অবস্থানিক এবং alচ্ছিক আর্গুমেন্টগুলি পরিচালনা করতে পারে, যখন অপ্টপার্সি কেবল alচ্ছিক আর্গুমেন্টগুলি পরিচালনা করতে পারে
আপনার কমান্ড লাইন ইন্টারফেসটি দেখতে কেমন হবে সে সম্পর্কে আরগপারস কৌতূহলযুক্ত নয় - প্রয়োজনীয় ফাইলগুলি যেমন-ফাইল বা / ফাইল সমর্থিত। Optparse ব্যবহারিকতার চেয়ে বিশুদ্ধতা পছন্দ করে এই বৈশিষ্ট্যগুলিকে সমর্থন করতে অস্বীকার করেছেন
আরগপারস আপনার যুক্তি থেকে নির্ধারিত কমান্ড-লাইন ব্যবহার এবং অবস্থানগত এবং alচ্ছিক উভয় যুক্তির জন্য বার্তা সহায়তা সহ আরও তথ্যবহুল ব্যবহারের বার্তা উত্পন্ন করে। অপ্টপার্স মডিউলটির জন্য আপনার নিজের ব্যবহারের স্ট্রিং লিখতে হবে এবং অবস্থানগত আর্গুমেন্টগুলির জন্য সহায়তা প্রদর্শনের কোনও উপায় নেই।
আরগপার্সে এমন ক্রিয়াকে সমর্থন করে যা কমান্ড-লাইন আর্গুমেন্টগুলির একটি পরিবর্তনশীল সংখ্যক গ্রাহককে ব্যবহার করে, অপ্টপার্সে আর্গুমেন্টের সঠিক সংখ্যা (যেমন 1, 2, বা 3) আগাম পরিচিত হওয়া দরকার
আরগপারস পার্সারগুলিকে সমর্থন করে যা সাব-কমান্ডগুলিতে প্রেরণ করে, যখন অপ্ট পার্সিকে allow_interspersed_args
পার্সার প্রেরণটি ম্যানুয়ালি সেট করা এবং করা দরকার
এবং আমার ব্যক্তিগত প্রিয়:
add_argument()
সাধারণ কলযোগ্যগুলির সাথে নির্দিষ্ট করার অনুমতি দেয় , যখন অপ্ট পার্সিকে হ্যাকিং শ্রেণীর বৈশিষ্ট্যগুলি পছন্দ করতে
STORE_ACTIONS
বা CHECK_METHODS
যথাযথ যুক্তি পরীক্ষার জন্য প্রয়োজন-f
বা --foo
"যখন যুক্তির সঠিক সংখ্যা আগেই জানা ছিল" এর সাথে যুক্ত নির্দিষ্ট যুক্তিগুলির অর্থ সম্ভবত পূর্ববর্তী কোনও বিকল্পের পতাকা ছাড়াই প্রদত্ত অবস্থানীয় আর্গুমেন্ট।
এছাড়াও argparse
stdlib মডিউল আছে ( stdlib মডিউলের একটি "ইমপোভমেন্ট" optparse
)। আরগপার্সের ভূমিকা থেকে উদাহরণ :
# script.py
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'integers', metavar='int', type=int, choices=range(10),
nargs='+', help='an integer in the range 0..9')
parser.add_argument(
'--sum', dest='accumulate', action='store_const', const=sum,
default=max, help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
ব্যবহার:
$ script.py 1 2 3 4
4
$ script.py --sum 1 2 3 4
10
Docopt গ্রন্থাগার সত্যিই বাক্পটুতাপূর্ণ হয়। এটি আপনার অ্যাপ্লিকেশনটির ব্যবহারের স্ট্রিং থেকে একটি আর্গুমেন্ট তৈরি করে।
ডকপট রিডমি থেকে উদাহরণস্বরূপ:
"""Naval Fate.
Usage:
naval_fate.py ship new <name>...
naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
naval_fate.py ship shoot <x> <y>
naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
naval_fate.py (-h | --help)
naval_fate.py --version
Options:
-h --help Show this screen.
--version Show version.
--speed=<kn> Speed in knots [default: 10].
--moored Moored (anchored) mine.
--drifting Drifting mine.
"""
from docopt import docopt
if __name__ == '__main__':
arguments = docopt(__doc__, version='Naval Fate 2.0')
print(arguments)
আপনার যদি দ্রুত প্রয়োজন হয় তবে খুব নমনীয় নয়
main.py:
import sys
first_name = sys.argv[1]
last_name = sys.argv[2]
print("Hello " + first_name + " " + last_name)
তারপরে দৌড়াও python main.py James Smith
নিম্নলিখিত আউটপুট উত্পাদন করতে:
হ্যালো জেমস স্মিথ
python main.py "James Smith"
যা রাখে James Smith
মধ্যে sys.argv[1]
এবং উত্পাদন করে IndexError
যখন আপনি অবাস্তব ব্যবহারের চেষ্টা sys.argv[2]
। কোথাকার আচরণ কিছুটা নির্ভর করে আপনি কোন প্ল্যাটফর্ম এবং শেল থেকে পাইথনটি চালাচ্ছেন তার উপর।
python main.py "James Joseph Smith"
? আপনি যদি সূচকের বাইরে সীমাবদ্ধতার সাথে সম্পর্কিত হন তবে আপনি সরবরাহিত আর্গুমেন্টের সংখ্যার জন্য একটি চেক যোগ করতে পারেন। কম বাস্তববাদী বা না, আমার উদাহরণটি দেখায় যে কীভাবে একাধিক যুক্তি পরিচালনা করা যায়।
gmail-trash-msg.py MessageID
। এই উত্তরটি পরীক্ষার MessageID
প্যারামিটারটি সোজা এগিয়ে দেওয়া হয়েছে sys.argv[1]
।
আমি নিজে অপ্টপার্স ব্যবহার করি তবে সত্যিকার অর্থে সাইমন উইলিসন তার সম্প্রতি চালু হওয়া অপ্টফান্ক লাইব্রেরির সাথে যে দিকটি নিয়ে যাচ্ছেন ঠিক তার মতোই । এটি এর দ্বারা কাজ করে:
"একটি ফাংশন সংজ্ঞা (এর আর্গুমেন্ট এবং তাদের পূর্বনির্ধারিত মানগুলি সহ) স্বজ্ঞাতকরণ এবং একটি কমান্ড লাইন আর্গুমেন্ট পার্সার তৈরি করতে এটি ব্যবহার করে" "
সুতরাং, উদাহরণস্বরূপ, এই ফাংশন সংজ্ঞা:
def geocode(s, api_key='', geocoder='google', list_geocoders=False):
এই অপ্ট পার্স সহায়তা পাঠ্যে পরিণত হয়েছে:
Options:
-h, --help show this help message and exit
-l, --list-geocoders
-a API_KEY, --api-key=API_KEY
-g GEOCODER, --geocoder=GEOCODER
আমি স্টাডলিব থেকে আগত পছন্দ করি, যেমন:
try:
opts, args = getopt.getopt(sys.argv[1:], 'h', ['help'])
except getopt.GetoptError, err:
usage(err)
for opt, arg in opts:
if opt in ('-h', '--help'):
usage()
if len(args) != 1:
usage("specify thing...")
জিনিসগুলিকে কম ভার্বোস (উদাহরণস্বরূপ; "-h" অন্তর্ভুক্ত করা) তৈরি করতে আমি ইদানীং এর সাথে সামঞ্জস্যপূর্ণ কিছু মোড়ানো করছি।
আপনি যেমন অপ্ট পার্সিকে দেখতে পাচ্ছেন "অপ্ট পার্সী মডিউলটি অবহিত হয়েছে এবং আরও বিকাশ হবে না; আরগপার্স মডিউলটির সাথে বিকাশ অব্যাহত থাকবে " "
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
Assuming the Python code above is saved into a file called prog.py
$ python prog.py -h
Ref-link: https://docs.python.org/3.3/library/argparse.html
কমান্ড লাইন আর্গুমেন্টগুলি পরিচালনা করা আরও সহজ করার জন্য আমি লিখেছিলাম যে পাইথন সামান্য মডিউলটিতে আপনার আগ্রহী হতে পারে (মুক্ত উত্স এবং ব্যবহারের জন্য নিখুঁত) - কমান্ডো
আমি ডকোপ্টকে এই অন্যদের জন্য একটি সহজ বিকল্প হিসাবে দেখার পরামর্শ দিই ।
ডকপ্ট একটি নতুন প্রকল্প যা আপনাকে নিজের সবকিছু প্রয়োগ করার প্রয়োজনের পরিবর্তে - - সহায়তা ব্যবহারের বার্তাটি পার্স করে কাজ করে। আপনাকে কেবল আপনার ব্যবহারের বার্তাটি পসিক্স ফর্ম্যাটে রাখতে হবে।
তবুও আরেকটি বিকল্প হ'ল আর্গ । এটি আরগপার্সে তৈরি করে এবং আপনাকে এই জাতীয় জিনিস লিখতে দেয়:
import argh
# declaring:
def echo(text):
"Returns given word as is."
return text
def greet(name, greeting='Hello'):
"Greets the user with given name. The greeting is customizable."
return greeting + ', ' + name
# assembling:
parser = argh.ArghParser()
parser.add_commands([echo, greet])
# dispatching:
if __name__ == '__main__':
parser.dispatch()
এটি স্বয়ংক্রিয়ভাবে সহায়তা তৈরি করবে এবং এগুলি এবং আপনি কীভাবে আরগ-পার্সিংয়ের কাজ করা উচিত সে সম্পর্কে অতিরিক্ত নির্দেশিকা সরবরাহ করতে সজ্জকারকে ব্যবহার করতে পারেন।
argh
অন্য libs বা ব্যবহারের চেয়ে ব্যবহার সহজ sys
।
argh
তবে এটি দৃশ্যের জন্য বিশেষভাবে উপযুক্ত নয় যেখানে আপনার চূড়ান্ত আকাঙ্ক্ষা সাবকম্যান্ডের সাথে আদেশ না রাখার জন্য।
def frobnicate_spleches(...)
কোনও ফাংশন সংজ্ঞায়িত করা পুরোপুরি সম্ভব বলে মনে হচ্ছে যা আপনার স্ক্রিপ্ট যা কিছু if __name__ == '__main__': argh.dispatch_command(frobnicate_spleches)
করে ফাইলের শেষে করবে।
আমার সমাধান এন্ট্রিপয়েন্ট 2 । উদাহরণ:
from entrypoint2 import entrypoint
@entrypoint
def add(file, quiet=True):
''' This function writes report.
:param file: write report to FILE
:param quiet: don't print status messages to stdout
'''
print file,quiet
সাহায্যকারী লেখা:
usage: report.py [-h] [-q] [--debug] file
This function writes report.
positional arguments:
file write report to FILE
optional arguments:
-h, --help show this help message and exit
-q, --quiet don't print status messages to stdout
--debug set logging level to DEBUG