如何检查正在执行的Python脚本行?

pio*_*kuc 4 python stack-trace

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

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

kin*_*all 6

您可以向Python脚本添加信号处理程序,将其发送到终端或文件,然后点击终端中的^ C将信号发送到进程.

import signal

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

signal.signal(signal.SIGINT, print_linenum)
Run Code Online (Sandbox Code Playgroud)

您还可以使用其他信号并使用kill命令发送信号,如果您需要^ C能够中断脚本,或设置a signal.alarm()定期打印信息,例如每秒一次.

如果你愿意,你可以从堆栈框架打印出其他东西; 那里有很多.请参阅此表frame对象的属性.