python - 如何检查正在执行的 Python 脚本的哪一行?

标签 python stack-trace

我有一个 Python 脚本,它在 Linux 服务器上运行了几个小时,为我处理一些数字。我想检查它的进度,所以我想看看现在正在执行哪一行。如果那是 C 或 C++ 程序,那么我将使用 gdb -p <pid> 附加到进程并使用 where 检查堆栈跟踪.当然,我可以对 Python 解释器进程执行相同的操作,但我在堆栈跟踪中看不到 Python 脚本的行。

那么,如何找出当前正在执行的 Python 脚本的哪一行呢?

最佳答案

您可以将信号处理程序添加到将此信息发送到终端或文件的 Python 脚本,然后在终端中按 ^C 以将信号发送到进程。

import signal

def print_linenum(signum, frame):
    print "Currently at line", frame.f_lineno

signal.signal(signal.SIGINT, print_linenum)

如果您需要 ^C 能够中断脚本,或者设置 signal.alarm( ) 定期打印信息,例如每秒一次。

如果你愿意,你可以从栈帧中打印出其他东西;那里有很多。查看 frame 对象的属性 in this table .

关于python - 如何检查正在执行的 Python 脚本的哪一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459298/

相关文章:

python - datetime.fromtimestamp() 比 datetime.utcfromtimestamp() 花费的时间更长

python - 在 Flask 中, session 如何传递到模板以及应用程序的功能之间?

php - 获取单行致命 php 错误的完整堆栈跟踪

Python - 如何构建和访问大量数据而不用尽内存或减慢处理速度

python - 异步和异步错误——TypeError : 'coroutine' object is not callable

java - 隐藏/处理 servlet 异常堆栈跟踪输出

java - 如何从 web start 下运行的客户端获取 Java 堆栈跟踪?

java - "Software caused connection abort: socket write error"的官方原因

python - 将两个单独的列表附加到列表列表

c# - 从 C# 打印堆栈跟踪信息