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



是否可以使用独立执行的脚本从脚本 a.py 中读取变量 b.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 中设置的那样,所以我必须大于 0。

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

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

a.py中创建值为 0 的变量i。这就是在b.py内部导入的内容(顺便说一句,您甚至可以只做import a; a.i,这将做同样的事情(。

没有任何内容会改变此变量的状态,因为runa.py中仅声明,未运行。如果您希望它改变您的变量,您可以从 b.py 运行它:

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

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

# a.py
i = 0
def run():
    ...
run()

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

另一种方法是使用一个通用的配置文件(例如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()

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

相关内容

  • 没有找到相关文章

最新更新