允许使用命令行参数定制模块/包,而不会干扰其用户



我很好奇如何在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。但是spam.py对此一无所知,并且可以使用它自己的optparse东西以及使用spam的函数do_stuff(),因为当spam.py作为模块导入时,' if __name__ == "__main__": '中的代码永远不会运行。

import语句放在if块中可能是不好的做法,但它似乎是最好的方法。

相关内容

  • 没有找到相关文章

最新更新