Python 命令行脚本。两种使用场景。如何实现参数解析?
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我会这样做:
我不确定这是否是 100% 你想要的,但我认为这个问题有点太接近了。这会给你一些关于如何实现你的目标的想法。
I'd do that this way:
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.
这两种情况对我来说似乎很不同,以至于我很想使用两个单独的脚本。如果它们共享公共代码,请将其放入自己的模块中并将其导入到每个脚本中。
如果您确实想使用一个脚本,为什么不使用 子解析器?然后,您将调用脚本并明确告诉它您想要什么场景,例如:
或
(其中“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.:
or
(Where 'calc' and 'read' are of course whatever names you want to use for these two functions.)
如果您使用 argparse 而不是 optparse,您可以通过省略字母前的 '-' 来分别指示必需参数
和可选参数,我可以像这样运行:
if you use argparse instead of optparse, you can indicate required arguments separately from optional ones by omitting the '-' before the letter
and i can run like this: