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。
答案 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'])