ArgParse:布尔曲调的必需参数
我要做的是调用带有2个参数的python脚本,例如 - himper_level_optional_arg
和 - preeg_data
。
- 准备_DATA
是布尔值默认为 false
。
现在,我想完成的事情,但我无法弄清楚的是:
如果 - prepary_data
is false
然后string grogng > - data_tag
(用于指向数据),否则不需要 - data_tag
是不需要的,但是您可以通过一个或多个可选参数数据准备,例如 - 准备_data_arg
。
我尝试结合地下阶层和互斥的群体,但我想我太菜鸟了,我无法使其起作用。
您能帮我还是向我指出正确的方向?
编辑: 最好用一些代码解释(我的不好)。
这是我的解析器定义:
if __name__ == "__main__":
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument(
"--higher_level_optional_arg",
default=5,
type=int,
help="some optional arg",
)
parser.add_argument(
"--prepare_data",
dest="prepare_data",
default=False,
action="store_true",
help="wether you want to prepare data or not"
)
parser.add_argument(
"--data_tag",
#required=True,
type=str,
help="if prepare_data is false, this should be required to retrieve existing data",
)
parser.add_argument(
"--prepare_data_arg",
default=10,
type=int,
help="if prepare_data is true you can pass this if you want",
)
args = parser.parse_args()
higher_level_optional_arg = args.higher_level_optional_arg
prepare_data = args.prepare_data
data_tag = args.data_tag
prepare_data_arg = args.prepare_data_arg
main()
然后,在 main
中,正如@hpaulj所建议的,我可以将我需要的逻辑放在:
def main():
if not prepare_data:
if not data_tag:
raise Exception("you need to pass --data_tag to retrieve the existing data")
else:
# retrieve the data with the data_tag
print("loading data...")
else:
# prepare the data using prepare_data_arg, if passed
print("preparing data...")
但是谁在运行脚本的人不知道 data_tag
如果 prepar_data == false
,并且他不应该收到此例外,则需要。
(请注意,如果 prepar_data == true
,则不需要 data_tag
,所以我不想输入必需= true
)
我重新制定的问题是:我可以在解析器定义中实现自己在这里做的事情吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论