有没有办法从正在运行的函数中检索局部变量?

时间:2015-08-07 12:45:26

标签: python raspberry-pi2 plotly

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

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中的情节已经消失了。完全删除。到目前为止,我正在弄乱我在电脑上的情节,然后我继续输入数据并从树莓派建立情节。我可以看到正在建立的情节没有问题。然后我回到我的电脑,点击刷新。情节和所有数据都没了。回到覆盆子。已经同步了。消失了。

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

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

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

强制性的最终评论:我对Plot.ly的信心已被粉碎,至少暂时如此。

1 个答案:

答案 0 :(得分:0)

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

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

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

  3. Ctrl + C处理可以这样做(来自here):

    #!/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()
    

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

相关问题