python - 可以让 Python 生成类似于 bash 的 set -x 的跟踪吗?

标签 python bash debugging set trace

在 Python 中是否有类似的机制,达到 set -x 对 bash 的影响?

这里是 bash 在此模式下的一些示例输出:

+ for src in cpfs.c log.c popcnt.c ssse3_popcount.c blkcache.c context.c types.c device.c
++ my_mktemp blkcache.c.o
+++ mktemp -t blkcache.c.o.2160.XXX
++ p=/tmp/blkcache.c.o.2160.IKA
++ test 0 -eq 0
++ echo /tmp/blkcache.c.o.2160.IKA
+ obj=/tmp/blkcache.c.o.2160.IKA

我知道 Python trace模块,但是它的输出似乎非常冗长,不像 bash 那样高级。

最佳答案

也许使用sys.settrace :

使用traceit()开启追踪,使用traceit(False)关闭追踪。

import sys
import linecache

def _traceit(frame, event, arg):
    '''
    http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html
    '''
    if event == "line":
        lineno = frame.f_lineno
        filename = frame.f_globals["__file__"]
        if (filename.endswith(".pyc") or
            filename.endswith(".pyo")):
            filename = filename[:-1]
        name = frame.f_globals["__name__"]
        line = linecache.getline(filename, lineno)
        print "%s  # %s:%s" % (line.rstrip(), name, lineno,)
    return _traceit

def _passit(frame, event, arg):
    return _passit

def traceit(on=True):
    if on: sys.settrace(_traceit)
    else: sys.settrace(_passit)

def mktemp(src):
    pass

def my_mktemp(src):
    mktemp(src)
    p=src

traceit()
for src in ('cpfs.c','log.c',):
    my_mktemp(src)
traceit(False)

产量

mktemp(src)  # __main__:33
pass  # __main__:30
p=src  # __main__:34
mktemp(src)  # __main__:33
pass  # __main__:30
p=src  # __main__:34
if on: sys.settrace(_traceit)  # __main__:26
else: sys.settrace(_passit)  # __main__:27

关于python - 可以让 Python 生成类似于 bash 的 set -x 的跟踪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3751927/

相关文章:

perl - 有没有带调试功能的免费 Windows Perl IDE?

perl - 为什么 Perl 的 quotemeta() 函数在调试器下表现不同?

linux - makefile 不生成可执行文件

iphone - 用于 XCode 调试的监 window 口

python - 如何在Rstudio中运行python脚本

python - 是否有 Ruby/Python HTML 重排/布局库?

python - 在 Python 中,in 运算符是如何实现的?它是否使用迭代器的 next() 方法?

Python:使用win32打开Excel文件

退出函数时的 Bash 陷阱

linux - 如何有效地从 Linux 中的大文件中取出 10% 的随机行?