1

Web からファイルをダウンロードし、何らかの処理を実行し、データを mysql db に保存するスクリプトを作成しています。

私はargparse引数を受け入れるために使用しています。基本的に、スクリプトは次の 4 つのうちの 1 つを実行します。

1) ユーザーが指定したファイル名を Web からダウンロードし、処理/db-insert を実行します。

2) 昨日の日付に基づいて最新のファイル名をダウンロードします。毎晩午前 2 時以降にこの部分を実行する cron ジョブがあります。

3) #2 と同じことを行いますが、ファイルを追加します。

4) 現在のフォルダー内のユーザー定義ファイルを処理し、同じフォルダー内の出力ファイルに保存します。

このスクリプトは、上記の 4 つのことのうち 1 つしか実行できません。そのため、次のように相互に排他的なオプションの引数を使用できると考えていました。

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-f','--filename',action='store',nargs=1,help='Filename to download')
group.add_argument('-b','--bulkfile',action='store',nargs=2,help='Bulk filename to process and save')
group.add_argument('-l', '--load', action='store_true', help='Download current load data')
group.add_argument('-s', '--supply', action='store_true', help='Download current supply data')
args = parser.parse_args()

if args.filename:
    do something
elif args.bulkfile:
    do something
elif args.load:
    do something
elif args.supply:
    do something
else: 
    print "Improper usage. Can only use [-f | -b | -l| -s]"
    return

これが理想的ではないことはわかっています。私はむしろargparseそれの使用部分に対処したいと思います。私は自分の目的を達成するための最適な方法を探しています。助けてくれてありがとう。

4

2 に答える 2

2

argparseが使用を処理します。引数なしでスクリプトを実行すると、次のエラー メッセージが表示されます。

usage: test.py [-h] (-f FILENAME | -b BULKFILE BULKFILE | -l | -s)
test.py: error: one of the arguments -f/--filename -b/--bulkfile -l/--load -s/--supply is required

-l両方で実行すると-s

usage: test.py [-h] (-f FILENAME | -b BULKFILE BULKFILE | -l | -s)
test.py: error: argument -s/--supply: not allowed with argument -l/--load

パーサーは、相互に排他的な引数のエラー メッセージを自動的に処理します。

于 2013-04-13T20:18:22.977 に答える
1

svnまたはの精神で、サブコマンドgitを使用できます。

于 2013-04-13T20:18:26.583 に答える