首页 > 解决方案 > 如何在 python 中使用 argparse 分隔空格分隔的参数

问题描述

我正在用 python 3 编写一个脚本,它从命令行获取空格分隔的参数。根据第一个参数,我调用不同的方法。调用脚本时,它看起来像这样:

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

用户将给出或 [-k] 或 [-p pr](不是两者)、编号和文件名。

例如:

1.python name.py -k 3 filename
如果用户给出 -k,那么我想调用一个函数,该函数将以数字 3(n1) 和 input_filename(filename) 作为参数。

def function1(n1, filename):
    code


2.python name.py -p 2 3 filename
如果用户给出-r,那么我想调用一个函数,该函数将具有数字2(pr)、数字3(n1) 和input_filename(filename) 作为参数。

def function2(pr, n1, filename):
    code


如何将参数与命令行分开并将它们用作函数的参数(使用 argparse)?

标签: python-3.xargparse

解决方案


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

测试

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

推荐阅读