退出python中的导入脚本

时间:2015-02-26 09:27:43

标签: python

abc.py

import xyz
#also import other required modules
#other required code
xyz.func()
#other required code

xyz.py

import threading
import sys
#few threads
def func():

    #start all threads
    threads.start()
    threads.join(timeout)
    #if not joined within given time, terminate all threads and exit from xyz.py
    if (threads.isAlive()):
        sys.exit()
#I used sys.exit() but it is not working for me.What else can I do here? `

我有一个python脚本abc.py导入另一个python脚本xyz.py. 我在xyz.py中使用sys.exit()函数。我在这里面临的问题是当在xyz.py文件中执行sys.exit()函数时,我的主文件即abc.py也会被终止。我不希望这种情况发生。即使xyz.py文件终止,我的文件abc.py仍应保持为ON。有没有办法实现这个目标?我将很高兴收到任何帮助/指导。我在centos 6.5上使用python 2.6.6。

1 个答案:

答案 0 :(得分:1)

xyz.py属于同一类型的问题是模块脚本。有一个通用的构造if __name__ == '__main__'允许将xyz.py中的脚本部分与 module 部分分开。更多信息请访问:What does if __name__ == “__main__”: do?

另外,你误解了import的工作原理。没有终止abc.py或xyz.py这样的东西,有单个解释器维护包含abc.py对象的全局命名空间。当解释器遇到import xyz语句时,它只是将名称xyz添加到命名空间并构建其内容,它会解释该文件中的语句。当它遇到sys.exit(0)时,它会执行它,从而退出解释器本身。

您可能需要将这两个文件保存为脚本并将解释器分开吗?然后使用subprocess.call,而不是导入,即:

import subprocess

subprocess.call([sys.executable, 'xyz.py'])