我很好奇我将如何在python中执行此操作。想象一下,我有一个模块spam.py
,我想用选项--spam_more
来控制垃圾邮件。允许使用命令行参数进行模块/包自定义而不干扰其用户
我该如何去使用argparse或其他一些解析库,它仍然允许主要的ham.py
文件有选择地使用命令行参数以及使用垃圾邮件模块。
我很好奇我将如何在python中执行此操作。想象一下,我有一个模块spam.py
,我想用选项--spam_more
来控制垃圾邮件。允许使用命令行参数进行模块/包自定义而不干扰其用户
我该如何去使用argparse或其他一些解析库,它仍然允许主要的ham.py
文件有选择地使用命令行参数以及使用垃圾邮件模块。
您可以将参数处理内容放入'if __name__ == "__main__":
'if
块内的任何代码只会在脚本从命令行或其他任何内容运行时运行,但不会在导入为模块时运行。例如在命令行键入$ python spam.py
将导致该块被执行。
下面是使用optparse(因为我还没有argparse之前使用)的例子:
spam.py:
def do_stuff(spammy=False):
if spammy:
print "wow, this is spammy."
else:
print "i've seen spammier."
if __name__ == "__main__":
from optparse import OptionParser
p = OptionParser()
p.add_option("--spam_more", action="store_true", dest="spammy")
(options, args) = p.parse_args()
do_stuff(options.spammy)
ham.py:
import spam
# do optparse stuff...
spam.do_stuff()
这是当您在spam.py上使用--spam_more
,spammy
将设置为True
。但是ham.py对此一无所知,并且可以使用它自己的optparse内容以及使用垃圾邮件功能do_stuff()
,因为当垃圾邮件模式导入spam.py时,'if __name__ == "__main__":
'内的代码永远不会运行。
将import
语句放入if
块中可能是不好的做法,但它似乎是最好的方法。