gpt4 book ai didi

python - Python 程序运行时获取全局变量

转载 作者:行者123 更新时间:2023-11-28 20:53:15 24 4
gpt4 key购买 nike

我在CentOS 5.5上编写了一个Python 2.5命令行程序,它已经运行了1天,并且仍在运行。现在我想结束这个程序,但获取全局变量的值。

我已经谷歌了一些。看来获取全局变量值的唯一方法是将 Python 程序附加到 GDB

假设全局变量是一个List,其名称为resultlist。我怎样才能得到它的值?

最佳答案

可以做到的,但是非常棘手,而且一个错误的举动就会导致程序崩溃(或者在不确定的状态下丢失)。

您可以使用C函数PyEval_GetGlobals()返回全局变量的字典(就像在 python 中调用 globals() 一样),然后使用 PyObject_Print()将该对象打印到文件(最简单的是 stdout 连接到的任何文件)。

您需要运行 GDB 并将其附加到 python 实例。然后在您知道将被调用的函数上设置一个断点(如果您的程序正在打印输出,则 PyObject_Print() 将起作用;否则 this page 有一些可能会被多次调用的函数。),然后当程序到达断点时,您需要禁用它并打印全局变量。

例如,如果我的Python程序的PID为15847:

(gdb) attach 15847
Attaching to process 15847.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ............. done
0x00007fff870b5e52 in select$DARWIN_EXTSN ()
(gdb) break PyObject_Print
Breakpoint 1 at 0x10003d8f4
(gdb) c
Continuing.

下次程序打印某些内容时:

Breakpoint 1, 0x000000010003d8f4 in PyObject_Print ()
(gdb) disable
(gdb) call (int)PyObject_Print((void*)PyEval_GetGlobals())
$1 = 0
(gdb) c
Continuing.

然后,在程序的输出中,您将看到全局字典。

关于python - Python 程序运行时获取全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com