1

我有一个可以以两种不同方式使用的 python 命令行脚本。

第一个场景是这样的:

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

其中-max-min是必需的参数并且-delta是可选的。

第二种情况是:

script.py some_file.txt -f

wheresome_file.txt是必需的位置参数并且-f是可选的。

我如何使用任何 Python 命令行参数解析器(argparse、optparse、getopt 等)来实现它?

更新:脚本只做一件事——抓取一个网站。但是操作时间很长。在第一种情况下,我们在第二次加载之前保存的会话时运行新的抓取会话并继续抓取。

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

这两种情况对我来说似乎很不同,以至于我很想使用两个单独的脚本。如果他们共享公共代码,请将其放在自己的模块中并将其导入每个脚本。

如果您确实想使用一个脚本,为什么不使用subparser呢?然后你会调用你的脚本并明确告诉它你想要什么场景,例如:

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

或者

script.py read some_file.txt -f

(“calc”和“read”当然是你想为这两个函数使用的任何名称。)

于 2011-12-19T18:21:44.440 回答
0

如果您使用 argparse 而不是 optparse,则可以通过省略字母前的“-”来分别指示必需参数和可选参数

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 回答