尝试在Python脚本中运行Pyflame时出错

时间:2016-10-07 14:15:32

标签: python profiling popen

目标:在另一个Python脚本中使用Pyflame分析Python脚本。

详细信息:代码在使用Ubuntu 14.04 LTS的虚拟机上运行。

1)运行我正在使用的配置文件脚本:

process = subprocess.Popen(["python", "python_script.py"])

2)然后我试图将Pyflame附加到过程中(将此行视为冒烟测试):

subprocess.Popen(["sudo pyflame -s 60 -r 0.0001 " + str(process.pid)],
                      shell=True)

问题:在上述语句中没有sudo我收到Failed to attach to PID ...: Operation not permitted错误。

sudo我得到Failed to locate libpython named libpython2.7.so

对于有关如何使声明2)工作的任何想法,无论有没有sudo,我将不胜感激!

1 个答案:

答案 0 :(得分:1)

显然,如果符合这些条件,Pyflame将返回你得到的第二个错误:

  • 您为Python 2.X编译了Pyflame。
  • 您尝试分析在Python 3.X解释器下运行的脚本。

查看Pyflame herehere的源代码。 运行Pyflame时,它会查看解释器的内存空间,并尝试查找 libpython2.7.so 。对于Python 3.X解释器,库不存在。

所以我建议您尝试以下方法:

  1. 运行以下命令。您将确认是否在解释器中正确加载了库。 cat /proc/{YOUR_PID}/maps | grep libpython2.7
  2. 如果不是,请考虑以下事项:
    1. 也许您描述了错误的进程(即它不是Python进程)。
    2. 也许这是一个Python 3.X过程,在这种情况下,您需要重新编译Pyflame以定位Python 3.X。
  3. 要在编译Pyflame时定位Python 3.X,请参阅文档。提示:您需要将呼叫更改为 ./ configure ,如下所示:

    ./configure --with-python=python3
    

    此外,如果您在环境中将 python3 识别为库时遇到问题,则需要对Python 3.X解释器的可执行文件进行符号链接。这有点超出了范围,因此您可以查看我的个人博客以获取更多详细信息(请参阅“使用Uber的Pyflame和日志解决扩展问题”一文)。免责声明:我是该帖子的作者。