我正在使用argparse
module创建一个python程序,我想让程序接受一个参数或两个参数。
我的意思是什么?好吧,我正在创建一个下载/解码MMS消息的程序,我希望用户能够提供电话号码和MMS-Transaction-ID来下载数据或从他们已下载的MMS数据系统中提供文件。
我想要的是这样的,你可以输入2个参数或1个参数:
./mms.py (phone mmsid | file)
注意:phone
是一个电话号码(如15555555555
),mmsid
是一个字符串(MMS-Transaction-ID),file
是一个文件用户的计算机
argparse
这可能吗?我希望我可以使用add_mutually_exclusive_group
,但这似乎没有做我想要的。
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('phone', help='Phone number')
group.add_argument('mmsid', help='MMS-Transaction-ID to download')
group.add_argument('file', help='MMS binary file to read')
这给出了错误(删除required=True
会产生相同的错误):
ValueError:互斥参数必须是可选的
看起来它希望我使用--phone
代替phone
:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--phone', help='Phone number')
group.add_argument('--mmsid', help='MMS-Transaction-ID to download')
group.add_argument('--file', help='MMS binary file to read')
在没有参数的情况下运行我的程序时,我看到:
错误:其中一个参数--phone --mmsid --file是必需的
这更接近我想要的,但我可以argparse
做(--phone --msid) or (--file)
吗?
答案 0 :(得分:4)
这有点超出了argparse
可以做的范围,因为第一个参数的“类型”未提前知道。我会做类似
import argparse
p = argparse.ArgumentParser()
p.add_argument("file_or_phone", help="MMS File or phone number")
p.add_argument ("mmsid", nargs="?", help="MMS-Transaction-ID")
args = p.parse_args()
要确定args.file_or_phone
是用作文件名还是电话号码,您需要检查args.mmsid
是否为None
。