Python命令行脚本。使用的两个场景。如何实现参数解析?

Python命令行脚本。使用的两个场景。如何实现参数解析?,python,parsing,command-line-arguments,argparse,args,Python,Parsing,Command Line Arguments,Argparse,Args,我有一个python命令行脚本,可以以两种不同的方式使用 第一种情况如下: script.py -max MAX -min MIN -delta DELTA $ argtest.py -d 10 5 20 Namespace(delta=10, max='20', min='5') 其中,-max和-min是必需的参数,-delta是可选的 第二种情况是: script.py some_file.txt -f 其中,some_file.txt是必需的位置参数,-f是可选的 如何使用任何Py

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

第一种情况如下:

script.py -max MAX -min MIN -delta DELTA
$ argtest.py -d 10 5 20
Namespace(delta=10, max='20', min='5')
其中,
-max
-min
是必需的参数,
-delta
是可选的

第二种情况是:

script.py some_file.txt -f
其中,
some_file.txt
是必需的位置参数,
-f
是可选的

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


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

我会这样做:

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%,但我认为这个问题有点太接近了。这会给你一些想法,如何实现你的目标。

我会这样做:

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%,但我认为这个问题有点太接近了。这会给你一些想法,如何实现你的目标。

这两种情况对我来说似乎完全不同,我很想使用两种不同的脚本。如果它们共享公共代码,则将其放在自己的模块中,并将其导入到每个脚本中

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

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


(其中“calc”和“read”当然是您想要用于这两个函数的任何名称。)

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

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

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


(其中“calc”和“read”当然是这两个函数要使用的任何名称。)

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

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
我可以这样跑:

script.py -max MAX -min MIN -delta DELTA
$ argtest.py -d 10 5 20
Namespace(delta=10, max='20', min='5')

如果使用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
我可以这样跑:

script.py -max MAX -min MIN -delta DELTA
$ argtest.py -d 10 5 20
Namespace(delta=10, max='20', min='5')