Как отделить разделенные пробелами аргументы используя argparse в python - PullRequest
0 голосов
/ 15 апреля 2020

Я пишу скрипт на python 3, который принимает аргументы, разделенные пробелом, из командной строки. В зависимости от первого аргумента я вызываю разные методы. При вызове скрипта это выглядит так:

python name.py [-k] [-p pr] number filename

Пользователь даст или [-k] или [-p pr] (не оба), номер и имя файла.

например:

1. python name.py -k 3 filename
если пользователь дает -k, тогда я хочу вызвать функцию, которая будет иметь в качестве аргументов число 3 (n1) и имя_файла_входа (имя файла).

def function1(n1, filename):
    code


2. python name.py -p 2 3 filename
если пользователь дает -r, тогда я хочу вызвать функцию, которая будет иметь в качестве аргументов число 2 (pr), число 3 (n1) и имя_файла input (имя файла).

def function2(pr, n1, filename):
    code


Как я могу отделить аргументы от командной строки и использовать их в качестве аргументов для функций (используя argparse)?

1 Ответ

0 голосов
/ 15 апреля 2020
import argparse

def function1(n1, filename):
    print('doing 1')
def function2(pr, n1, filename):
    print('doing 2')

parser = argparse.ArgumentParser()
parser.add_argument('-k', action='store_true')
parser.add_argument('-p', '--pr')
parser.add_argument('number', type=int)
parser.add_argument('filename')
args = parser.parse_args()
print(args)

# could use mutually_exclusive_group, but with this simple alternative
# this is just as good.  Tweak as needed.
if args.k:
    function1(args.number, args.filename)
elif args.pr is not None:
    function2(args.pr, args.number, args.filename)

добавить в свой комментарий (исправлено):

import sys
argv = sys.argv
print(argv)
if argv[1]=="-p": 
    function2(int(argv[2]), int(argv[3]), argv[4]) 
if argv[1]=="-k": 
    function1(int(argv[2]), argv[3])

test

1700:~/mypy$ python3 stack61218370.py -p 2 3 filename
Namespace(filename='filename', k=False, number=3, pr='2')
doing 2
['stack61218370.py', '-p', '2', '3', 'filename']
doing 2
1702:~/mypy$ python3 stack61218370.py -k 3 filename
Namespace(filename='filename', k=True, number=3, pr=None)
doing 1
['stack61218370.py', '-k', '3', 'filename']
doing 1
...