6

我有一个 Python 脚本,它在 Linux 服务器上运行了几个小时,为我计算了一些数字。我想检查它的进度,所以我想看看现在正在执行哪一行。如果那是 C 或 C++ 程序,那么我只需使用 附加到进程gdb -p <pid>并使用where. 当然,我可以对 Python 解释器进程做同样的事情,但是我在 stacktrace 中看不到 Python 脚本的行。

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

4

1 回答 1

8

您可以在 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中对象的属性。

于 2013-07-03T22:57:31.623 回答