Python通过两个不同的文件访问变量

时间:2018-01-29 13:21:56

标签: python python-3.x global-variables

是否可以使用独立的执行脚本b.py

从脚本a.py中读取变量

实施例: a.py

#!/usr/bin/env python3
import time

i = 0

def run():
    global i
    print(i)
    i = i+1

def get_i():
    return i

def main():
    pass        

if __name__ == "__main__":                  
    while True:
        run()        
        time.sleep(5)

print("Stopped")

b.py

#!/usr/bin/env python3

import a

print(a.get_i())

如果b.py被执行,它将打印0但 i 希望它打印a.py中设置的 i 的当前状态,所以 i 必须大于0。

我已尝试使用额外的c.py,其中 i 保存为全局变量,然后在.py和b.py中导入c.py,但它的行为相同:b。 py打印 i 的初始值,而不是a.py中设置的值

注意:a.py在b.py之前启动,并且由于while循环而仍在运行,然后执行b.py.

2 个答案:

答案 0 :(得分:0)

a.py中,您可以创建值为i的变量0。这是在b.py内导入的内容(顺便说一下,你甚至可以import a; a.i执行此操作,这也是相同的。)

此变量的状态没有任何变化,因为run中的a.py仅在声明的中未被运行。如果您希望改变变量,可以从b.py

运行
from a import run, get_i
run()
print(get_i())

或者您可以在run中执行a.py。这是99%的不良做法,你真的应该知道为什么你需要这个,如果你这样做:

# a.py
i = 0

def run():
    ...

run()

这种方式run将在导入期间执行,因为python只是在导入期间执行文件中的所有内容。

答案 1 :(得分:0)

另一种方法是使用通用配置文件(例如config.txt)来存储 i 值。 我的意思的最小例子如下:

<强> a.py

#!/usr/bin/env python

i = 0

# create a config.txt in the same directory

def get_i():
    with open('config.txt', 'r') as f:
        last_i = f.read().splitlines()[-1]
    return last_i

def run():
    global i
    while True: 
        i += 1
        with open('config.txt', 'a') as f:
            f.write(str(i)+'\n')

if __name__ == '__main__':
    try:
        run()
    except KeyboardInterrupt:
        exit(0)

b.py 如下:

#!/usr/bin/env python

print __import__('a').get_i()

虽然这是一个非常简单的例子,但你想要做的是在编程中是一种不好的做法。另外正如我所说,这是一个非常简单的例子,但在现实生活中,访问公共资源的问题并不那么简单。