1

2 つの異なる方法で使用できる Python コマンド ライン スクリプトがあります。

最初のシナリオは次のとおりです。

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

ここで-max、 と-minは必須の引数で、-deltaオプションです。

2 番目のシナリオは次のとおりです。

script.py some_file.txt -f

wheresome_file.txtは必須の位置引数であり、-fオプションです。

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

更新: スクリプトが行うことは 1 つだけです - サイトをスクレイピングします。しかし、それは非常に長い時間の操作です。最初のケースでは、新しいスクレイプ セッションを実行し、2 回目のロードでは以前に保存したセッションをロードしてスクレイピングを続行します。

4

3 に答える 3

6

私はこのようにします:

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

それが 100% 望んでいるかどうかはわかりませんが、この質問は少し近すぎると思います。それは、あなたの目標をどのように達成できるか、あなたにいくつかのアイデアを与えるでしょう.

于 2011-12-19T17:45:52.563 に答える
2

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

1つのスクリプトを使用したい場合は、サブパーサーを使用してみませんか?次に、スクリプトを呼び出して、必要なシナリオを明示的に伝えます。例:

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

また

script.py read some_file.txt -f

(ここで、「calc」と「read」はもちろん、これら2つの関数に使用する名前です。)

于 2011-12-19T18:21:44.440 に答える
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

そして、私はこのように実行できます:

$ argtest.py -d 10 5 20
Namespace(delta=10, max='20', min='5')
于 2011-12-28T00:13:45.237 に答える