你可以使python脚本在导入时的行为与直接运行时不同吗?

时间:2012-04-08 17:27:23

标签: python

我经常需要编写数据解析脚本,我希望能够以两种不同的方式运行它们:作为模块和独立脚本。所以,例如:

def parseData(filename):
    # data parsing code here
    return data

def HypotheticalCommandLineOnlyHappyMagicFunction():
    print json.dumps(parseData(sys.argv[1]), indent=4)

这里的想法是,在另一个python脚本中,我可以调用import dataparser并在我的脚本中访问dataParser.parseData,或者在命令行上我可以运行python dataparser.py,它会运行我的HypotheticalCommandLineOnlyHappyMagicFunction并将数据分流为json到stdout。有没有办法在python中执行此操作?

1 个答案:

答案 0 :(得分:13)

执行此操作的标准方法是保护仅在脚本被单独调用时运行的代码

if __name__ == "__main__":
    # Your main script code

如果导入模块,则不会运行此if之后的代码。

__name__特殊变量包含当前模块的名称作为字符串。如果您的文件名为glonk.py,则__name__如果文件作为模块导入则为"glonk",如果文件作为展位运行,则"__main__"为{{1}} - 独立脚本。