Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于壳牌公司;集合-x";对于python_Python_Linux - Fatal编程技术网

相当于壳牌公司;集合-x";对于python

相当于壳牌公司;集合-x";对于python,python,linux,Python,Linux,在Linux上,是否有python脚本的调试工具,可以在执行代码行之前打印代码行,类似于shell脚本中的“set-x”指令 我知道调试pdb模块,但我不知道它可以做到这一点(stacktrace不适用)。 我知道strace,但它不进行这种级别的调试 例如: def step_1(): print("some step 1...") return 123 def step_2(some_value): print("some step 2... %s" % (some

在Linux上,是否有python脚本的调试工具,可以在执行代码行之前打印代码行,类似于shell脚本中的“set-x”指令

我知道调试pdb模块,但我不知道它可以做到这一点(stacktrace不适用)。 我知道strace,但它不进行这种级别的调试

例如:

def step_1():
    print("some step 1...")
    return 123

def step_2(some_value):
    print("some step 2... %s" % (some_value) )
    return "abc"

# main
x = step_1()
y = step_2(x)
使用我正在寻找的假设调试工具执行:

$ python t.py 
+ step_1()
+ print("some step 1...")
some step 1...
+ x = 123
+ step_2(123)
+ print("some step 2... %s" % (123) )
some step 2... 123
+ y = "abc"
调试器经常出于类似目的使用的,可用于实现此类功能。以下是一个最小的示例,您可以根据自己的需要进行调整:

import sys
import inspect

this_module = sys.modules['__main__']
source_lines = inspect.getsource(this_module).splitlines()

def mytrace(frame, event, arg):
    if source_lines and event in {'line', 'call', 'return'}:
        line = source_lines[frame.f_lineno].strip()
        print('+', line)
    return mytrace

sys.settrace(mytrace)


def step_1():
    print("some step 1...")
    return 123

def step_2(some_value):
    print("some step 2... %s" % (some_value) )
    return "abc"

# main
x = step_1()
y = step_2(x)

由于Python不是bash,而且执行模型不同,因此您可能无法获得与shell脚本中的
set-x
完全相同的输出(例如,在Python上下文中,带有literal右值的行
+y=“abc”
)但是,通过与传递到跟踪的
对象交互,您应该能够重新创建足够相似的内容,以满足您的需要。

导入pdb;pdb.set_trace()
试试itpdb.set_trace()立即中断。但是我想让我的脚本一路单独运行,只打印调试信息。它停止执行,当它停止时,按
n
,你会逐行检查代码。你想在执行之前打印即将执行的代码行吗?如果是这样,stacktrace不正是你需要的吗?