【问题标题】:Run code from other Python file while reflecting changes to other file [duplicate]从其他 Python 文件运行代码,同时反映对其他文件的更改 [重复]
【发布时间】:2017-04-19 00:27:58
【问题描述】:

考虑以下 Python (2.7.9) 代码:

test.py

import test2
import time

while True:
    print test2.getData()
    time.sleep(1)

test2.py

def getData ():
    return [1,2,3]

运行:

python -u test.py

如果我在 test.py 运行时修改 test2.py(例如,将其更改为 return [4,5,6]),test.py 不变。这并不意外。

但是,我希望对 test2.py 的更改能够反映在输出中。有没有办法做到这一点?例如。像每次调用 test2.getData() 时重新解析 test2.py 之类的东西?

其他尝试过的东西,来自 cmets:

  • import test2 移动到循环中。
  • 在测试运行时删除 test2.pycimport 进出循环)。

【问题讨论】:

  • 我假设您的代码在运行之前已转换为字节码,因此在执行过程中不会反映对任何文件的修改
  • 也许你可以尝试将 import 语句移动到循环中,但你为什么想要这个似乎仍然很奇怪
  • @cricket_007 test2.pyc 已生成,虽然在修改 test2.py 后删除它对输出没有影响。
  • 嗯。值得一试。无论如何 - 是的,读取文件可能是唯一的选择。或者以某种方式缓存在内存中,比如 Redis 或 Sqlite 内存表
  • @cricket_007 我终于想通了;只需要改进我的搜索关键字。这是reload(test2)。很简单。虽然为时已晚,因为我最终只是将数据存储在 CSV 文件中并解析它(这也很容易)。

标签: python python-2.7 python-import


【解决方案1】:

如果我没记错的话,python 代码将在执行之前转换为字节码,因此在运行时无法更改代码。 我建议你做的是创建一个全局变量或一个类,然后改变它。另一种解决方案是将数据写入文件,但没有太大好处,因为它需要访问文件系统并且不会像变量一样快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多