我很好奇如何在 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):
垃圾邮件.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)
火腿.py:
import spam
# do optparse stuff...
spam.do_stuff()
这是当您--spam_more
在 spam.py 上使用时,spammy
将设置为True
. 但是 ham.py 对此一无所知,并且可以使用它自己的 optparse 内容以及使用垃圾邮件的功能,do_stuff()
因为if __name__ == "__main__":
当 spam.py 作为模块导入时,“ ”内的代码永远不会运行。
import
将语句放在块中可能是不好的做法if
,但这似乎是最好的方法。