如何让 Perl 和 Python 打印正在执行的程序的每一行?

Posted

技术标签:

【中文标题】如何让 Perl 和 Python 打印正在执行的程序的每一行?【英文标题】:How can I make Perl and Python print each line of the program being executed? 【发布时间】:2010-05-20 08:28:13 【问题描述】:

我知道bash -x script.sh 将在实际执行之前执行脚本打印每一行。 如何让 Perl 和 Python 解释器做同样的事情?

【问题讨论】:

【参考方案1】:

Devel::Trace 是 Perl 的类似物,trace module 是 Python 的。

【讨论】:

澄清:分别为perl -d:Trace program.plpython -m trace -t program.py @Vi.+1 用于 Devel::Trace 的命令行选项。 FWIW:要在 apache mod_perl 下启用 perl 调试,请参见以下链接:perlmonks.org/?node_id=412121。没试过,但可能对其他人有帮助。【参考方案2】:

python -m trace -t main.py

测试程序:

main.py

from a import g
def f(i):
    g(i)
for i in range(3):
    f(i)

a.py

def g(i):
    print i

输出:

 --- modulename: main, funcname: <module>
main.py(1): from a import g
 --- modulename: a, funcname: <module>
a.py(1): def g(i):
main.py(2): def f(i):
main.py(4): for i in range(3):
main.py(5):     f(i)
 --- modulename: main, funcname: f
main.py(3):     g(i)
 --- modulename: a, funcname: g
a.py(2):     print i
0
main.py(4): for i in range(3):
main.py(5):     f(i)
 --- modulename: main, funcname: f
main.py(3):     g(i)
 --- modulename: a, funcname: g
a.py(2):     print i
1
main.py(4): for i in range(3):
main.py(5):     f(i)
 --- modulename: main, funcname: f
main.py(3):     g(i)
 --- modulename: a, funcname: g
a.py(2):     print i
2
main.py(4): for i in range(3):
 --- modulename: trace, funcname: _unsettrace
trace.py(80):         sys.settrace(None)

在 Ubuntu 16.10、Python 2.7.12 上测试。

【讨论】:

这对于问题的其他答案似乎是多余的。 @duskwuff 感谢您的反馈。它节省了单击并发现您需要-t,并显示了您在最小的多文件示例中获得的结果。【参考方案3】:

Devel::DumpTrace 于 2011 年发布,比 Devel::Trace 具有更多功能,例如在跟踪输出中评估变量值。

【讨论】:

以上是关于如何让 Perl 和 Python 打印正在执行的程序的每一行?的主要内容,如果未能解决你的问题,请参考以下文章

Perl 的 system() 如何打印它正在运行的命令?

如何打印 Perl 的 DBI 填充占位符后执行的 SQL 查询?

如何在 Perl 中打印数组的所有值

swig:让 c++ 对象在 perl 中可打印?

Perl:如何从@EXPORT 打印变量和值

关于字符编码的Python和Perl打印的区别