如何阻止python导入首先运行并且仅在代码中调用时运行

时间:2019-01-18 12:00:00

标签: python python-2.7 python-import

我当前正在将python脚本导入到我的主python文件中。当我导入脚本并通过命令行运行主脚本时,导入的脚本似乎先运行并显示输出,然后再运行我的主脚本。我的导入脚本中没有main(),而我的主脚本中只有这个。我的代码如下:

import argparse
from test_compare_filesets import testing


def main():


 print("export_data is the main file")


 parser = argparse.ArgumentParser()
 parser.add_argument("-d", "--export-date", action="store_true", required=False)
 parser.add_argument("-t", "--execute-test", action="store_true", required=False)

 args = parser.parse_args()

 if args.execute_test :
     print "Test Mode"
     testing()

 if args.export_date :
     print "Normal Mode"


if __name__ == '__main__':
    main()
else:

    print ("DIE EXPORT_DATA")

2 个答案:

答案 0 :(得分:2)

当您在主文件中调用from test_compare_filesets import testing时,模块test_compare_filesets.py将运行。 定义函数后,然后运行最后一部分:

if __name__ == '__main__':
    testing()
else:
    print "DIE COMPARE FILSETS"

由于已导入此模块,因此其__name__属性为不是 "__main__",因此运行了else子句,并输出DIE COMPARE FILSETS。导入之后,您的主脚本定义了自己的功能。 由于您的主脚本将__name__作为"__main__",因此它将运行main()函数并打印export_data is the main file。 因此,您将期待以下输出:

$ python main_script.py
DIE COMPARE FILSETS
export_data is the main file

(紧随main()函数执行期间的所有打印内容。

答案 1 :(得分:-1)

到目前为止,这是我的代码。本质上,当使用-t标志运行python脚本时,这将从test_compare_filesets返回所有内容并打印到终端,就像传递-d标志一样,它将仅打印“正常模式”。我似乎收到一个RunTimeError并出现以下问题:“ RuntimeError:调用Python对象时超出了最大递归深度:

import argparse
from test_compare_filesets import testing

def main():



    parser = argparse.ArgumentParser()
    parser.add_argument("-d", "--export-date", action="store_true", required=False)
    parser.add_argument("-t", "--execute-test", action="store_true", required=False)

    args = parser.parse_args()

    if args.execute_test :
        print "Test Mode"
        testing()

    else:
        print "Normal Mode"


if __name__ == '__main__':
    main()
else:

    print ("DIE EXPORT_DATA")