2017-01-10 45 views
1

我正在爲python中的程序製作一個arg解析器,並且想知道多個值參數的典型格式是什麼。arg解析器的最佳實踐每個arg具有多個值

例如,說我有我試圖做一個命令將視頻與評級相關聯。我想讓用戶在一個命令中包含多個視頻。視頻評分有1:1的關係,因此對於每個視頻他們都是一個評分。

我應該格式化,所以它是這樣的:

協會

cat_video.mp4 - > 6

video1.mp4 - > 9

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

或結合這樣的冒號和分隔的路徑

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

我寧願使用什麼典型的格式,所以任何其他選項讚賞。

在此先感謝

+0

你想如何組織?在'bash'中有一個數組,即'array [cat_video.mp4] - > 6'?像這樣? – Inian

+0

對不起,我說可能會讓我感到困惑,但我只是想說清哪個視頻是屬於哪個級別的。@Inian – h3y4w

回答

1

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 

與外殼陣列組合,你可以使用它像這樣:

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[@]}}" 
+0

非常感謝。我只是想知道什麼是自然的,並且爲例子+1。 – h3y4w