2013-04-09 32 views

回答

1

您可以将参数处理内容放入'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_morespammy将设置为True。但是ham.py对此一无所知,并且可以使用它自己的optparse内容以及使用垃圾邮件功能do_stuff(),因为当垃圾邮件模式导入spam.py时,'if __name__ == "__main__":'内的代码永远不会运行。

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

相关问题