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

发布于 2024-12-22 01:58:38 字数 485 浏览 3 评论 0原文

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

第一种情况是这样的:

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

其中 -max-min 是必需参数,-delta 是可选参数。

第二种情况是:

script.py some_file.txt -f

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

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

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

I have a python command line script that may be used in two different ways.

First scenario is like this:

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

where -max and -min are required arguments and -delta is optional.

The second scenario is:

script.py some_file.txt -f

where some_file.txt is required positional argument and -f is optional.

How do i implement that using any Python command line arguments parser (argparse, optparse, getopt, etc)?

UPDATE: script does only one thing - scrapes a site. But it's very long in time operation. In first case we run new scrape session while in second load earlier saved session and continue scrapping.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

燃情 2024-12-29 01:58:38

我会这样做:

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

I'd do that this way:

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

I'm not sure, if that's 100% what you want, but I think that this question is a little too close. That would give you some idea, how your goal can be achieved.

我爱人 2024-12-29 01:58:38

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

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

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

script.py read some_file.txt -f

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

Those two cases seem different enough to me that I would be tempted to use two separate scripts. If they share common code, put that in its own module and import it into each script.

If you do want to use one script, why not use a subparser? Then you'd invoke your script and explicitly tell it what scenario you want, e.g.:

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

or

script.py read some_file.txt -f

(Where 'calc' and 'read' are of course whatever names you want to use for these two functions.)

红ご颜醉 2024-12-29 01:58:38

如果您使用 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')

if you use argparse instead of optparse, you can indicate required arguments separately from optional ones by omitting the '-' before the letter

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

and i can run like this:

$ argtest.py -d 10 5 20
Namespace(delta=10, max='20', min='5')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文