python-3.x - 如何在 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)?
解决方案
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
推荐阅读
- iis - 使更改在 IIS 中生效
- java - http 404 请求的资源 [/MyProject/] 不可用
- python-3.x - 我创建了一个函数来通过其 rowid 删除 sqlite3 数据库的行。但是为什么我无法在我的函数中传递两位数的 rowid?
- python - 从解析的 xml 文本中提取值
- jquery - Select2 多选 - 无法更改选项的字体大小
- javascript - 我如何检测客户端更改是否再次启用广告拦截器
- excel - 如何动态更改 Excel 表格列引用?
- android - 是否可以使用 MediaStore.VOLUME_EXTERNAL 获取 WhatsApp 媒体文件
- node.js - Firebase 不考虑部署的新更新
- vue.js - 如何在 Vue 2 Leaflet 地图上添加 .tif 图像