绝望。假设我们有以下内容:
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 中的 plotly 已经消失了。彻底删除。到目前为止,我一直在搞乱我在 PC 上的绘图,然后我继续输入数据并从 raspberry pi 构建绘图。我可以看到正在 build 的地 block 没问题。然后我回到我的电脑并点击刷新。 plotly 和所有数据都消失了。回到覆盆子。已经同步。走了。
我知道 list1 和 list2 在我写这篇文章时包含了我重新制作 plotly 所需的所有数据。但是有什么办法可以访问它并将其保存到文件中吗?我的 python shell 当前正在等待通过 raw_input 的输入,所以我不能使用 shell。有什么方法可以终止当前仍在运行的程序范围内的变量吗?显然,一旦程序结束,局部变量就会被删除。
当然,如果在 plot.ly 上为每个绘图保存历史记录,那会有所帮助,但我找不到任何恢复到以前状态的选项。
更新:所以 - 感谢上帝 - 我已将一些中间步骤的输出保存到文件中。我实际上放弃了访问变量的尝试,而是尝试通过一个新的即时脚本生成 list1
和 list2
。早上 8 点 30 分,我拿到了数据,上午 10 点,我的主管高兴地看着它,但一点也没有发现。这个问题仍然悬而未决,尽管到目前为止还没有人给出明确的答案或解释为什么不能直接访问 list1
和 list2
。 (我确实仔细阅读了评论中的每条建议,但找不到任何可以提供答案的内容)
强制性的最后评论:我对 Plot.ly 的信心已经破灭,至少在一段时间内是这样。
最佳答案
为了能够“读取”内部变量以进行调试,我看到了以下想法:
创建一个日志文件,在每个阻塞函数之前为每个变量更改一行。即使日志很大。然后在 Raspberry(新控制台或新远程连接)上使用“tail”跟踪日志。
将变量转换为全局变量并添加一些代码,当按下特殊键时将所有变量输出到标准输出,例如 Ctrl+C 几乎可以中断所有操作。 如果无法将变量转换为全局变量(例如由于嵌套调用的原因),请创建包含最后已知值的新变量。
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()
如您所见,我的选择意味着修改代码以使其变得健谈或可查询。
关于python - 有没有办法从正在运行的函数中检索局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31878055/