如何使用 trace.py 跟踪 Python 脚本

越来越多的 Linux 操作系统管理任务脚本是由 Python 编写的。
这篇文章旨在介绍一个跟踪 Python 语句执行的工具。
Python 是一种动态的面向对象编程语言,可用于开发各种类型的软件。
它为与其他语言和工具的集成提供了强大的支持,并带有广泛的标准库。
在 Linux 发行版中,Python 被广泛用于编写管理工具,例如打印机配置包等。

跟踪 Python 语句执行并逐行记录所有运行代码对于高效定位问题原因非常有用。

幸运的是,python 包附带了一个工具 trace.py ,可以用来满足这些要求。
trace.py 位于 /user/lib/python2.x 目录中,其中 python2.x 是 python 版本(例如 python2.3 和 python2.4 等)

# rpm -ql python |grep trace.py
/usr/lib/python2.3/trace.py
/usr/lib/python2.3/trace.pyc
/usr/lib/python2.3/trace.pyo

例如跟踪/usr/sbin/printconf-backend,命令如下:

# /usr/lib/python2.x/trace.py --trace /usr/sbin/printconf-backend

它将在控制台上显示所有调试信息和 python 脚本源代码。
我们可以按如下方式记录所有输出。

# script /tmp/printerconf.log
# /usr/lib/python2.x/trace.py --trace /usr/sbin/printconf-backend
# exit
#

然后检查 /tmp/printerconf.log 文件。

注意:默认情况下,trace.py 没有执行权限。
所以在执行上述指令之前需要授予执行权限。

欢迎来到之路教程(on itroad-com)

Trace.py 的更多选项

使用选项 -help 显示 trace.py 的详细使用信息。
例如:

$ /usr/lib/python2.3/trace.py --help
Usage: /usr/lib/python2.3/trace.py [OPTIONS]  [ARGS]
Meta-options:
--help                Display this help then exit.
--version             Output version information then exit.
Otherwise, exactly one of the following three options must be given:
-t, --trace           Print each line to sys.stdout before it is executed.
-c, --count           Count the number of times each line is executed
                      and write the counts to .cover for each
                      module executed, in the module's directory.
                      See also `--coverdir', `--file', `--no-report' below.
-l, --listfuncs       Keep track of which functions are executed at least
                      once and write the results to sys.stdout after the
                      program exits.
-r, --report          Generate a report from a counts file; do not execute
                      any code.  `--file' must specify the results file to
                      read, which must have been created in a previous run
                      with `--count --file=FILE'.
Modifiers:
-f, --file=     File to accumulate counts over several runs.
-R, --no-report       Do not generate the coverage report files.
                      Useful if you want to accumulate over several runs.
-C, --coverdir=  Directory where the report files.  The coverage
                      report for . is written to file
                      //.cover.
-m, --missing         Annotate executable lines that were not executed
                      with '>>>>>> '.
-s, --summary         Write a brief summary on stdout for each file.
                      (Can only be used with --count or --report.)
Filters, may be repeated multiple times:
--ignore-module= Ignore the given module and its submodules
                      (if it is a package).
--ignore-dir=    Ignore files in the given directory (multiple
                      directories can be joined by os.pathsep).
日期:2020-09-17 00:10:52 来源:oir作者:oir