跟踪另一个脚本中的Python脚本执行

时间:2019-08-08 16:09:14

标签: python python-3.x

我正在构建一个教育工具来分析Python代码,目前,我需要一种在代码执行期间访问变量值的方法。

我知道我可以使用Python模块trace,并且从python -m trace example.py获得的输出是理想的数据,可以用来完成所需的操作,但是我无法使其以编程方式运行,并从脚本通过命令行运行它是我的最后资源。

another question中,作者希望做与我几乎相同的事情,并且,加上this question通过使用sys.settrace使我朝着正确的方向前进。

在下面的代码示例中,我能够以自己想要的方式跟踪代码执行。

import StringIO
import sys

# to programmatically provide stdin values to the script
sys.stdin = StringIO.StringIO("3")

# to output current variable values
def dump_frame(frame, event, arg):
  print '%d: %s' % (frame.f_lineno, event)
  for k, v in frame.f_locals.iteritems():
      print '    %s = %r' % (k, v)
  return dump_frame

# external script should be executed here, instead
# of this static program
def main():
  j = int(raw_input())

  while j < 10:
    j += 1

  print j

sys.settrace(dump_frame)

main()

但是我需要动态加载main()中的代码,我该怎么做?我尝试执行以下所示的操作,其中“ mycode”来自“ ./mycode.py”,其中包含以上代码中main()中的脚本。但是然后,跟踪输出太长了,也许是因为__import__函数的内部工作也被跟踪了吗?

# ...
def main():
  __import__('mycode')
# ...

那么,如何动态加载代码并对其进行跟踪以获取变量值?

0 个答案:

没有答案