3

绝望的。假设我们有以下内容:

def main():
 ALotOFCode
 list1 = []
 list2 = []
 while condition:
  # a lot of times where raw_input is used in this loop
  # e.g. 
  x = raw_input('lots of steps to compute x')
  y = raw_input('lots of steps to compute y')  
  list1 = list1.append(x)
  list2 = list2.append(y)
  stream.write({'x':list1,'y':list2}) #send new data point to plot.ly via raspberry pi

我不知道发生了什么。但是我在 plot.ly 中的情节已经消失了。彻底删除。到目前为止,我在我的 PC 上弄乱了我在情节上的内容,然后我继续输入数据并从树莓派构建情节。我可以看到正在建造的情节没有问题。然后我回到我的电脑并点击刷新。绘图和所有数据都消失了。回到覆盆子。已经同步了。走了。

虽然我知道现在 list1 和 list2 在我写这篇文章时包含我需要重新制作我的情节的所有数据。但是有什么办法可以访问它并将其保存到文件中吗?我的 python shell 目前正在等待通过 raw_input 输入,所以我不能使用 shell。有什么方法可以让我进入当前仍在运行的程序范围内的变量?显然,一旦程序结束,局部变量就会被删除。

当然,如果为 plot.ly 上的每个情节保存历史记录,那将有所帮助,但我找不到任何恢复到先前状态的选项。

更新:所以-谢天谢地-我已将一些中间步骤的输出保存到文件中。我实际上放弃了尝试访问该变量,而是尝试生成list1list2通过一个新的动态脚本。早上 8 点 30 分,我拿到了我的数据,上午 10 点,我的主管高兴地看着它,一点也不聪明。这个问题仍然悬而未决,尽管到目前为止没有人给出明确的答案或解释如何访问list1list2直接是不可能的。(我确实浏览了评论中的每个建议,但找不到任何提供答案的东西)

强制性的最后评论:我对 Plot.ly 的信心已经破灭,至少有一段时间。

4

1 回答 1

0

为了能够“读取”内部变量以进行调试,我看到了以下想法:

  1. 为每个变量更改和每个阻塞函数之前创建一个带有一行的日志文件。即使日志很大。然后在 Raspberry 上使用“tail”跟踪日志(新控制台或新远程连接)。

  2. 将变量转换为全局变量,并添加一些代码,在按下特殊键时将所有变量输出到标准输出,例如 Ctrl+C 会中断几乎所有内容。如果无法将变量转换为全局变量(例如由于嵌套调用的原因),请创建保存最后一个已知值的新变量。

Ctrl+C 处理可以这样做(从这里):

#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame):
        print('You pressed Ctrl+C!')
        sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
signal.pause()

如您所见,我的选择意味着修改代码以使其变得健谈或可查询。

于 2015-08-11T07:59:17.080 回答