与导入一起使用时,Execfile运行该文件两次

时间:2015-04-25 03:53:49

标签: python user-interface tkinter python-import execfile

我想在我的GUI中有一个文本框和一个按钮,点击按钮后,它应该将文本存储在一个变量中,然后运行另一个文件。

我希望用户输入访问令牌,GUI应该将其保存在utilities.py的全局变量access_token中 但是在导入仅用于设置访问令牌的功能时,文件会运行,直到单击按钮才能运行。 所以,实际上文件运行了两次。

这是我的gui.py

from Tkinter import *
import Tkinter as tk
from utilities import setAccessToken

root = tk.Tk()

def callback():
    setAccessToken(E1.get())
    execfile('utilities.py')

E1 = Entry(root,bd = 5, width = 10)
E1.pack()
#similarly other GUI stuff with command = callback()

mainloop()

这是我的utilities.py

access_token = ""
def setAccessToken(token):
    global access_token
    access_token = token

print 'Running Utilities : access_token =', access_token

我的预期输出是:

Running Utilities: access_token = my access token

但我得到两次输出,即:

Running Utilities: access_token =
Running Utilities: access_token = my access token

在我导入文件时,有什么方法可以阻止文件utilities.py运行吗?

1 个答案:

答案 0 :(得分:2)

导入python文件时,将执行其中的所有代码。这就是python的工作原理。为防止执行不需要的代码,我们应始终使用__name__,如下所示:

access_token = ""
def setAccessToken(token):
    global access_token
    access_token = token

if __name__ == '__main__':
    print 'Running Utilities : access_token =', access_token