هل كانت مفيدة؟

المحلول

الحل الكنسي في المكتبة القياسية هو 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 يدعم (من بين أمور أخرى):

  • خيارات متعددة بأي ترتيب.
  • خيارات قصيرة وطويلة.
  • قيم افتراضية.
  • إنشاء رسالة تعليمات الاستخدام.

نصائح أخرى

import sys

print("\n".join(sys.argv))

sys.argv هي قائمة تحتوي على جميع الوسائط التي تم تمريرها إلى البرنامج النصي في سطر الأوامر.

أساسًا،

import sys
print(sys.argv[1:])

فقط حول تنصير عن argparse الذي هو أفضل بالنسبة هذه الأسباب..أساسا:

(نسخ من الرابط)

  • argparse وحدة يمكن التعامل مع الموضعية و وسيطات اختيارية ، في حين optparse فقط يمكن التعامل مع اختياري الحجج

  • argparse ليس العقائدي عن ما واجهة سطر الأوامر يجب أن تبدو الخيارات مثل الملف أو /ملف معتمدة ، كما هي الخيارات المطلوبة.Optparse يرفض دعم هذه الميزات ، وفضلت نقاء على التطبيق العملي

  • argparse تنتج أكثر بالمعلومات استخدام الرسائل ، بما في ذلك استخدام سطر الأوامر المحددة حججك و المساعدة في رسائل سواء الموضعية و اختياري الحجج.على optparse وحدة يتطلب منك أن تكتب الاستخدام الخاصة بك سلسلة و لا طريقة عرض مساعدة الموضعية الحجج.

  • argparse يدعم عمل تستهلك عدد متغير من سطر الأوامر وسائط ، في حين optparse يتطلب أن العدد الدقيق الحجج (مثلا ، 1 أو 2 أو 3) تكون معروفة مقدما

  • argparse يدعم موزعي أن إرسال الفرعية الأوامر ، في حين optparse يتطلب وضع allow_interspersed_args والقيام محلل الإرسال يدويا

و الشخصية المفضلة:

  • argparse يسمح نوع عمل المعلمات add_argument() أن تكون محددة مع بسيطة callables ، في حين يتطلب optparse القرصنة سمات الطبقة مثل STORE_ACTIONS أو CHECK_METHODS للحصول على سليم حجة التحقق

يوجد ايضا argparse وحدة ستدليب ("التحسين" على stdlib's optparse وحدة).مثال من مقدمة إلى argparse:

# 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

طريقة واحدة للقيام بذلك هي استخدام sys.argv.سيؤدي هذا إلى طباعة اسم البرنامج النصي باعتباره الوسيط الأول وجميع المعلمات الأخرى التي تمررها إليه.

import sys

for arg in sys.argv:
    print arg

ال com.docopt المكتبة رائعة حقًا.يقوم ببناء وسيطة من سلسلة الاستخدام لتطبيقك.

على سبيل المثال من الملف التمهيدي 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

لإنتاج الإخراج التالي:

مرحبا جيمس سميث

#set default args as -h , if no args:
if len(sys.argv) == 1: sys.argv[1:] = ["-h"]

يمكنني استخدام optparse نفسي, ولكن في الحقيقة مثل اتجاه سيمون Willison أخذ مع أدخلت مؤخرا optfunc المكتبة.وهو يعمل عن طريق:

"introspecting وظيفة تعريف (بما في ذلك الحجج و القيم الافتراضية) و باستخدام أن بناء سطر الأوامر حجة محلل."

لذا, فعلى سبيل المثال, هذا تعريف الدالة:

def geocode(s, api_key='', geocoder='google', list_geocoders=False):

تحولت إلى هذا optparse نص التعليمات:

    Options:
      -h, --help            show this help message and exit
      -l, --list-geocoders
      -a API_KEY, --api-key=API_KEY
      -g GEOCODER, --geocoder=GEOCODER

أنا أحب getopt من stdlib، على سبيل المثال:

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" ضمنيًا).

كما ترون com.optparse "تم إهمال وحدة optparse ولن يتم تطويرها بشكل أكبر؛سيستمر التطوير مع argparse وحدة."

بوكو انقر أكثر سهولة، ويتطلب نموذجًا أقل، وهو على الأقل بنفس قوة argparse.

نقطة الضعف الوحيدة التي واجهتها حتى الآن هي أنه لا يمكنك إجراء الكثير من التخصيص لصفحات المساعدة، ولكن هذا ليس مطلبًا عادةً com.docopt يبدو وكأنه الاختيار الواضح عندما يكون كذلك.

قد تكون مهتمًا بوحدة Python الصغيرة التي كتبتها لتسهيل التعامل مع وسيطات سطر الأوامر (مفتوحة المصدر ومجانية الاستخدام) - كوماندوز

أوصي بالنظر com.docopt كبديل بسيط لهؤلاء الآخرين.

docopt هو مشروع جديد يعمل عن طريق تحليل رسالة استخدام --help بدلاً من مطالبتك بتنفيذ كل شيء بنفسك.عليك فقط وضع رسالة الاستخدام الخاصة بك بتنسيق POSIX.

هناك خيار آخر آرغ.إنه يعتمد على argparse، ويتيح لك كتابة أشياء مثل:

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()

سيقوم تلقائيًا بإنشاء المساعدة وما إلى ذلك، ويمكنك استخدام أدوات الديكور لتوفير إرشادات إضافية حول كيفية عمل تحليل الوسيطات.

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

الحل الخاص بي هو نقطة الدخول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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top