2011-12-19 11 views
1

私は2つの異なる方法で使用されるpythonコマンドラインスクリプトを持っています。 -max-minは引数を必要としていると-deltaはオプションですPythonコマンドラインスクリプト。使用の2つのシナリオ。どのように引数の解析を実装するのですか?

script.py -max MAX -min MIN -delta DELTA 

最初のシナリオは、このようなものです。

第2のシナリオは次のとおり

script.py some_file.txt -f 
some_file.txtが位置引数を必要とされる

-fは任意です。

どのようにPythonのコマンドライン引数パーサ(argparse、optparse、getoptなど)を使用して実装するのですか?

UPDATE:スクリプトは1つのことしか行いません。サイトをスクレイプします。しかし、それは時間の操作で非常に長いです。最初のケースでは、セーブしたセッションをセカンドロードしている間に新しいスクレイプセッションを実行し、スクラップを続行します。

答えて

6

私はこの方法があることを行うだろう:それは100%だ場合

parser = OptionParser() 
parser.add_option("-max", dest="max") 
parser.add_option("-min", dest="min") 
parser.add_option("-delta", dest="delta") 
parser.add_option("-f", dest="f_thing", action="store_true") 

(options,args) = parser.parse_args() 

if not args: 
    if not options.max or not options.min: 
     parser.error("Please provide a max and min value.") 
    else: 
     yourfunction(options, args) # without some_file.txt name 
else: 
     yourfunctions(options, args) # pass the some_file.txt name 

を私はあなたが望むもの、わからないんだけど、私はこの質問は少し近すぎると思います。それはあなたの目標がどのように達成されるか、あなたにいくつかのアイデアを与えるでしょう。

2

これらの2つのケースは、2つの別々のスクリプトを使用するように誘惑されるほど私とは異なっているようです。共通のコードを共有する場合は、それを独自のモジュールに入れ、各スクリプトにインポートします。

1つのスクリプトを使用する場合は、subparserを使用してください。その後、例えば、あなたのスクリプトを呼び出すと、明示的に何をしたいのシナリオということを教えたい:

script.py calc -max MAX -min MIN -delta DELTA 

または

「CALC」と「読み」は、あなたがしたいものは何でも名前はもちろんです
script.py read some_file.txt -f 

を(この2つの関数で使用)

0

あなたが代わりのoptparseのargparse使用する場合は、省略することで、オプションのものとは別に必要な引数を指定することができます。 - 手紙

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('min', help="min value for function") 
parser.add_argument('max', help="max value for function") 
parser.add_argument('-d','--delta', type=int, help="the delta value") 
args = parser.parse_args() 

print args 
01の前に「」を

と私はこのように実行できます:

$ argtest.py -d 10 5 20 
Namespace(delta=10, max='20', min='5') 
関連する問題