كيف بإمكاني تنسيق المساعدة حجة الموضعية باستخدام optparse بايثون؟
-
22-07-2019 - |
سؤال
وكما ذكر في مستندات لل يستخدم optparse.OptionParser
على IndentedHelpFormatter
لإخراج مساعدة خيار تنسيق، والتي والتي وجدت بعض <لأ href = "http://corebio.googlecode.com/svn/tags/0.5.0/apidocs/optparse.IndentedHelpFormatter-class.html" يختلط = "noreferrer"> وثائق API .
<القوي> أريد لعرض نص التعليمات بتنسيق مشابه للمطلوب، والحجج الموضعية في نص الاستخدام. هناك محول أو نمط استخدام بسيطة والتي يمكن استخدامها لتنسيق مماثل حجة الموضعية؟
توضيح
ويفضل فقط باستخدام stdlib. Optparse لا كبيرة إلا لهذا الوضوح تنسيق واحد، وأنا أشعر أننا ينبغي أن تكون قادرة على إصلاح دون استيراد مجموعات أخرى كاملة. : -)
المحلول
وأفضل رهان سيكون لكتابة التصحيح إلى وحدة optparse. في غضون ذلك، يمكنك إنجاز هذا مع فئة OptionParser معدلة بشكل طفيف. هذه ليست مثالية، ولكن سوف تحصل على ما تريد القيام به.
#!/usr/bin/env python
from optparse import OptionParser, Option, IndentedHelpFormatter
class PosOptionParser(OptionParser):
def format_help(self, formatter=None):
class Positional(object):
def __init__(self, args):
self.option_groups = []
self.option_list = args
positional = Positional(self.positional)
formatter = IndentedHelpFormatter()
formatter.store_option_strings(positional)
output = ['\n', formatter.format_heading("Positional Arguments")]
formatter.indent()
pos_help = [formatter.format_option(opt) for opt in self.positional]
pos_help = [line.replace('--','') for line in pos_help]
output += pos_help
return OptionParser.format_help(self, formatter) + ''.join(output)
def add_positional_argument(self, option):
try:
args = self.positional
except AttributeError:
args = []
args.append(option)
self.positional = args
def set_out(self, out):
self.out = out
def main():
usage = "usage: %prog [options] bar baz"
parser = PosOptionParser(usage)
parser.add_option('-f', '--foo', dest='foo',
help='Enable foo')
parser.add_positional_argument(Option('--bar', action='store_true',
help='The bar positional argument'))
parser.add_positional_argument(Option('--baz', action='store_true',
help='The baz positional argument'))
(options, args) = parser.parse_args()
if len(args) != 2:
parser.error("incorrect number of arguments")
pass
if __name__ == '__main__':
main()
وإخراج تحصل من تشغيل هذا:
Usage: test.py [options] bar baz
Options:
-h, --help show this help message and exit
-f FOO, --foo=FOO Enable foo
Positional Arguments:
bar The bar positional argument
baz The baz positional argument
نصائح أخرى
وحاول إلقاء نظرة على argparse . وتقول الوثائق التي تدعم الحجج موقف وأجمل تبحث رسائل مساعدة.
وسأكون مهتما في حل نظيفة لذلك؛ لكنني لم أتمكن من أجل التوصل إلى واحد. وOptionParser حقا تركز كليا على الخيارات؛ أنها لا تعطيك أي شيء للعمل مع وسائط الموقف، بقدر ما استطعنا العثور عليها.
ما فعلته كان لإنشاء قائمة من كتل وثائق قليلا لكل من حججي الموضعية، وذلك باستخدام \t
s للحصول على التباعد الصحيح. ثم انضممت لهم أسطر جديدة، وإلحاق ذلك إلى سلسلة "الاستخدام" التي يحصل تمريرها إلى OptionParser.
ويبدو على ما يرام، لكنه يشعر سخيفة، وبالطبع أن الوثائق ينتهي تظهر أعلى قائمة من الخيارات. لم أجد أي طريقة حول ذلك، أو كيفية القيام بأي أشياء معقدة، أي يتم وصف مجموعة معينة من الخيارات تحت وصف لARG الموضعية، لأنها لا تنطبق إلا على أن وسيطة.
ونظرت إلى أساليب OptionParser ل-الترقيع القرد وأتذكر (كان هذا العام أو قبل ذلك) أنه لا يمكن أن يكون من الصعب، ولكن لم أكن أريد أن تسلك هذا المسار.
ومعظم نص التعليمات الحجج الموضعية يشبه شكل يكثر استخدامها في صفحات الرجل ل* صناديق نيكس. نلقي نظرة على كيف تم توثيقه الأمر 'حزب المحافظين' . نص التعليمات الخاصة بك ينبغي أن تشبه.
وإلا ما دمت ملء "مساعدة" حجة أثناء استخدام محلل، يجب على وثائق إنتاج نفسها.