2017-01-10 5 views
1

私はPythonでプログラム用のargパーサを作成していて、複数の値のargの典型的な形式を知りたいと考えました。argごとに複数の値を持つargパーサのベストプラクティス

たとえば、動画を評価に関連付けるコマンドを作成しようとしているとします。ユーザーが複数のビデオを1つのコマンドに含めることを許可します。ビデオとレーティングとの関係は1:1なので、すべてのビデオで1つのレーティングです。

それはこのようですので、私はそれをフォーマットする必要があります

団体

cat_video.mp4 - > 6

video1.mp4 - > 9

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

またはこのようなコロンで区切られたパスとintを組み合わせる

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

関連する問題