每个arg有多个值的arg解析器的最佳实践

2024-09-28 23:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python为一个程序做一个arg解析器,想知道多值arg的典型格式是什么。你知道吗

例如,假设我有,我正在尝试发出一个命令,将视频与分级相关联。我想允许用户在一个命令中包含多个视频。有一个1:1的关系,视频评级,所以每一个视频是一个评级。你知道吗

我应该这样格式化它吗:

关联

猫_视频.mp4--&大于6

视频1.mp4-->;9

vidrate --video cat_video.mp4 video1.mp4 --rating 6 9

或者将路径和int组合起来,用冒号分隔

vidrate --video cat_video.mp4:6 video1.mp4:9

我宁愿使用什么样的典型格式是这样任何其他选择是赞赏的。你知道吗

提前谢谢


Tags: 用户命令gt程序解析器视频关系video
1条回答
网友
1楼 · 发布于 2024-09-28 23:20:58

Python标准库直接支持这两种样式。你知道吗

  • video <video> <rating>对于用户来说可能更自然
  • videos/ ratings如果您已经在调用脚本中分离了数据,那么它可能很有用。你知道吗

如果您愿意,您可以同时支持这两种方法;您选择哪一种方法主要取决于您的意见,取决于您的脚本最有可能被使用的方式。你知道吗

import argparse

p = argparse.ArgumentParser()
p.add_argument(' video', nargs=2, action='append')
p.add_argument(' videos', nargs='+')
p.add_argument(' ratings', nargs='+')
args = p.parse_args()

for vid, rating in args.video:
    print("Video: {}, rating: {}".format(vid, rating))

# It is up to the caller to make sure the same number of videos and ratings
# are specified with  videos and  ratings
for vid, rating in zip(args.videos, args.ratings):
    print("Video: {}, rating: {}".format(vid, rating))

然后你可以简单地使用

vidrate  video cat_video.mp4 6 video1.mp4 9

或者

vidrate  videos cat_video.mp4 video1.mp4  ratings 6 9

甚至是一个组合

vidrate  video cat_video.mp4 6 video1.mp4 9  videos foo.mp4 bar.mp4 baz.mp4  ratings 1 2 3

与shell数组结合使用时,可以这样使用它:

cat_vid=(cat_video.mp4 6)
vid_one=(video1.mp4 9)
other_videos=(foo.mp4 bar.mp4 baz.mp4)
other_ratings=(1 2 3)
vidrate  video "${cat_vid[@]}"  video "${vid_one[@]}"  videos "${other_videos[@]}"  ratings "${other_ratings[@]}}"

相关问题 更多 >