【问题标题】:How to get a value from within a looping python process如何从循环的python进程中获取值
【发布时间】:2017-07-29 00:44:08
【问题描述】:

我需要帮助来理解 Python 中的一个概念。

我想在导入/打印代码实际运行的时间点打印在 python 循环中运行的变量的特定值。

“当前”值是指实际运行导入和打印代码时变量的(单个)值。

我需要执行此操作的实际代码/原因有点抽象,如果我使用确切的代码可能会使事情复杂化,因此为了简单明了,我在下面提供了一个简化示例。

我有两个文件:

file1.py

import datetime
while True:
    x = datetime.datetime.now()
    print x

运行时打印并滚动当前日期/时间,如下所示:

2017-03-08 11:34:22.363000
2017-03-08 11:34:22.363000
2017-03-08 11:34:22.452000
2017-03-08 11:34:22.452000
2017-03-08 11:34:22.782000
2017-03-08 11:34:22.782000
2017-03-08 11:34:22.970000
....

我希望能够运行另一个 python 文件/进程,在导入和打印代码实际运行的特定时间导入和打印 x 的特定值。

例如,如果 file2.py 的导入/打印代码在 2017-03-08 11:34:22.782000 执行,则应打印以下内容...

2017-03-08 11:34:22.782000
Process finished with exit code 1

我遇到的问题是,当我运行以下导入和打印语句时,日期/时间打印在一个滚动列表中,这似乎反映了 file1.py 正在做什么,并且不返回特定的时间点值和我预期的一样……

file2.py

import file1
print file1.x

简而言之,我的问题是,如何从重复过程中导入和打印变量的特定时间点值,而不是导入和打印完整的重复过程。

我希望这是有道理的,如果我在这里遗漏了什么,请原谅我,但我一直试图找到解决方案但没有成功,所以我想看看我是否可以在这里得到任何指示......

非常感谢任何帮助。谢谢...

【问题讨论】:

  • 为什么不直接从其他脚本调用datetime.datetime.now()?或者这是一个XY问题? meta.stackexchange.com/questions/66377/what-is-the-xy-problem
  • Why is Python running my module when I import it, and how do I stop it? 的可能重复项(如果不是,那么我不明白你想要什么)
  • @MarkSmith 与您的代码示例,它肯定是重复的。当您在 file2.py 中 import test1 时,file1.py 的 while True-loop 将被执行,并且您永远不会到达您的 print test1.x-statement(这应该会引发错误)。
  • @MarkSmith 这是重复的,请阅读重复。
  • 恕我直言,您在文件和进程之间存在混淆。如果一个外部进程更新了一个变量,导入它的源并不会神奇地建立与外部进程的链接,而只是运行原始脚本的一个新副本。如果 test1 看起来像你的代码,你不想导入它。

标签: python python-2.7 loops


【解决方案1】:

如果您希望通过访问file1.x 来计算x 的值,就好像它是property 一样,您可以通过某种变通方法来形成一个包含属性的模块对象:

import types, sys, datetime

class UpdateDetector(types.ModuleType):
    @property
    def x(self):
        x = datetime.datetime.now()
        return x

self = UpdateDetector(__name__)

sys.modules[__name__] = self

请注意,如果这是您正在寻找的那种行为,那么不覆盖该模块并仅使用具有属性的对象而不是模块对象。或者更好的是,只使用(getter)函数,比如datetime.datetime.now() ;)

【讨论】:

  • 谢谢你 Tadhg McDonald-Jensen - 我需要一些时间来理解你上面写的内容以及你都指向的副本中写的内容 - 我遇到的实际问题是变量通过 pika/RabbitMQ 更新。我有一个接收 amqp 消息并将它们存储在变量中的进程,当我尝试获取变量的特定时间点值时,我收到一个滚动列表,这表明我正在复制接收器代码,正如您和其他人所指出的那样。 .. 我将对此进行进一步调查,然后再回来讨论 - 非常感谢你们(所有人)的帮助!
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 2021-05-26
  • 2018-11-13
  • 2023-03-18
  • 2021-05-06
相关资源
最近更新 更多