我有一个 Python 脚本,它在 Linux 服务器上运行了几个小时,为我计算了一些数字。我想检查它的进度,所以我想看看现在正在执行哪一行。如果那是 C 或 C++ 程序,那么我只需使用 附加到进程gdb -p <pid>
并使用where
. 当然,我可以对 Python 解释器进程做同样的事情,但是我在 stacktrace 中看不到 Python 脚本的行。
那么,如何找出当前正在执行的 Python 脚本的哪一行?
我有一个 Python 脚本,它在 Linux 服务器上运行了几个小时,为我计算了一些数字。我想检查它的进度,所以我想看看现在正在执行哪一行。如果那是 C 或 C++ 程序,那么我只需使用 附加到进程gdb -p <pid>
并使用where
. 当然,我可以对 Python 解释器进程做同样的事情,但是我在 stacktrace 中看不到 Python 脚本的行。
那么,如何找出当前正在执行的 Python 脚本的哪一行?
您可以在 Python 脚本中添加一个信号处理程序,将该信息发送到终端或文件,然后在终端中点击 ^C 将信号发送到进程。
import signal
def print_linenum(signum, frame):
print "Currently at line", frame.f_lineno
signal.signal(signal.SIGINT, print_linenum)
kill
如果您需要 ^C 能够中断脚本,您也可以使用其他信号并使用命令发送信号,或者设置 asignal.alarm()
以定期打印信息,例如每秒一次。
如果您愿意,可以从堆栈帧中打印出其他内容;那里有很多。请参阅此表frame
中对象的属性。