استدلال های موقعیتی argparse
مثال زیر با استدلال های موقعیتی کار می کند. آنها با add_argument () ایجاد می شوند.
import argparse
# positional args
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('age')
args = parser.parse_args()
print(f'{args.name} is {args.age} years old')
مثال انتظار دو استدلال موضعی را دارد: نام و سن.
parser.add_argument('name')
parser.add_argument('age')
آرگومان های موقعیتی بدون نویسه های پیشوند داش ایجاد می شوند.
positional_arg.py Peter 23
Peter is 23 years old
گزینه dest از add_argument () یک نام به آرگومان می دهد. اگر داده نشود ، از گزینه استنباط می شود.
import argparse
import datetime
# dest gives a different name to a flag
parser = argparse.ArgumentParser()
parser.add_argument('-n', dest='now', action='store_true', help="shows now")
args = parser.parse_args()
# we can refer to the flag
# by a new name
if args.now:
now = datetime.datetime.now()
print(f"Now: {now}")
برنامه نام فعلی را به آرگومان -n می دهد.
dest.py -n
Now: 2019-03-22 17:37:40.406571
نوع argparse
آرگومان type نوع آرگومان را تعیین می کند.
import argparse
import random
# type determines the type of the argument
parser = argparse.ArgumentParser()
parser.add_argument('-n', type=int, required=True,
help="define the number of random integers")
args = parser.parse_args()
n = args.n
for i in range(n):
print(random.randint(-100, 100))
این برنامه n عدد صحیح تصادفی را از -100 تا 100 نشان می دهد.
parser.add_argument('-n', type=int, required=True,
help="define the number of random integers")
گزینه -n انتظار مقدار عدد صحیح را دارد و لازم است.
rand_int.py -n 3
92
-61
-61
پیشفرض در argparse
اگر مقدار داده نشده باشد ، گزینه پیش فرض مقدار پیش فرض را مشخص می کند.
import argparse
# required defines a mandatory argument
# default defines a default value if not specified
parser = argparse.ArgumentParser()
parser.add_argument('-b', type=int, required=True, help="defines the base value")
parser.add_argument('-e', type=int, default=2, help="defines the exponent value")
args = parser.parse_args()
val = 1
base = args.b
exp = args.e
for i in range(exp):
val *= base
print(val)
مثال زیر توان را محاسبه می کند. مقدار نماد مورد نیاز نیست اگر داده نشود ، پیش فرض 2 خواهد بود.
power.py -b 3
9
power.py -b 3 -e 3
27
argparse metavar
گزینه metavar به مقدار مورد انتظار در خطا کمک می کند و به خروجی ها کمک می کند.
import argparse
# metavar gives name to the expected value
# in error and help outputs
parser = argparse.ArgumentParser()
parser.add_argument('-v', type=int, required=True, metavar='value',
help="computes cube for the given value")
args = parser.parse_args()
print(args)
val = args.v
print(val * val * val)
مثال مقدار ارزش مورد انتظار را نامگذاری می کند. نام پیش فرض V است.
metavar.py -h
usage: metavar.py [-h] -v value
optional arguments:
-h, --help show this help message and exit
-v value computes cube for the given value
argparse append
عملکرد ضمیمه امکان گروه بندی گزینه های تکرار را فراهم می کند.
import argparse
# append action allows to group repeating
# options
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--name', dest='names', action='append',
help="provides names to greet")
args = parser.parse_args()
names = args.names
for name in names:
print(f'Hello {name}!')
به عنوان مثال پیام های تبریک به تمام نام های مشخص شده با گزینه های n یا name تولید می شود. آنها می توانند چندین بار تکرار شوند.
appending.py -n Peter -n Lucy --name Jane
Hello Peter!
Hello Lucy!
Hello Jane!
argparse nargs
nargs تعداد آرگومان های خط فرمان را مشخص می کند.
import argparse
import sys
# nargs sets the required number of argument values
# metavar gives name to argument values in error and help output
parser = argparse.ArgumentParser()
parser.add_argument('chars', type=str, nargs=2, metavar='c',
help='starting and ending character')
args = parser.parse_args()
try:
v1 = ord(args.chars[0])
v2 = ord(args.chars[1])
for i in range(v1,v2):
print(chr(i))
except TypeError as e:
raise
print('Error: arguments must be characters')
parser.print_help()
sys.exit(1)
if v1 > v2:
print('first letter must precede the second in alphabet')
parser.print_help()
sys.exit(1)
مثال توالی کارکترها را ازکارکتر یک به کارکتر دو نشان می دهد. انتظار دو استدلال دارد.
parser.add_argument('chars', type=str, nargs=2, metavar='c',
help='starting and ending character')
با nargs = 2 مشخص می کنیم که انتظار دو استدلال را داریم.
charseq.py e k
e
f
g
h
i
j
این برنامه توالی کارکترها را از e تا k نشان می دهد.
تعداد متغیر آرگومان ها را می توان با کارکتر* تنظیم کرد.
import argparse
# * nargs expects 0 or more arguments
parser = argparse.ArgumentParser()
parser.add_argument('num', type=int, nargs='*')
args = parser.parse_args()
print(f"The sum of values is {sum(args.num)}")
مثال مجموع مقادیر را محاسبه می کند. ما می توانیم تعداد متغیر آرگومان ها را برای برنامه مشخص کنیم.
var_args.py 1 2 3 4 5
The sum of values is 15
argparse choices
گزینه Choices آرگومان های موجود در لیست داده شده را محدود می کند.
import argparse
import datetime
import time
# choices limits argument values to the
# given list
parser = argparse.ArgumentParser()
parser.add_argument('--now', dest='format', choices=['std', 'iso', 'unix', 'tz'],
help="shows datetime in given format")
args = parser.parse_args()
fmt = args.format
if fmt == 'std':
print(datetime.date.today())
elif fmt == 'iso':
print(datetime.datetime.now().isoformat())
elif fmt == 'unix':
print(time.time())
elif fmt == 'tz':
print(datetime.datetime.now(datetime.timezone.utc))
در مثال ، گزینه now می تواند مقادیر زیر را بپذیرد: std ، iso ، unix یا tz.
mytime.py --now iso
2019-03-27T11:34:54.106643
mytime.py --now unix
1553682898.422863
Head example
مثال زیر دستور head Linux را تقلید می کند. n سطرهای یک متن از ابتدای پرونده را نشان می دهد.
# words.txt
sky
top
forest
wood
lake
wood
به عنوان مثال ، ما این پرونده آزمایشی کوچک را داریم.
import argparse
from pathlib import Path
# head command
# working with positional arguments
parser = argparse.ArgumentParser()
parser.add_argument('f', type=str, help='file name')
parser.add_argument('n', type=int, help='show n lines from the top')
args = parser.parse_args()
filename = args.f
lines = Path(filename).read_text().splitlines()
for line in lines[:args.n]:
print(line)
مثال دارای دو گزینه است: f برای یک نام پرونده و -n برای تعداد خطوط نشان داده شده است.
head.py words.txt 3
sky
top
forest