目标:在另一个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
,我将不胜感激!
答案 0 :(得分:1)
显然,如果符合这些条件,Pyflame将返回你得到的第二个错误:
查看Pyflame here和here的源代码。 运行Pyflame时,它会查看解释器的内存空间,并尝试查找 libpython2.7.so 。对于Python 3.X解释器,库不存在。
所以我建议您尝试以下方法:
cat /proc/{YOUR_PID}/maps | grep libpython2.7
要在编译Pyflame时定位Python 3.X,请参阅文档。提示:您需要将呼叫更改为 ./ configure ,如下所示:
./configure --with-python=python3
此外,如果您在环境中将 python3 识别为库时遇到问题,则需要对Python 3.X解释器的可执行文件进行符号链接。这有点超出了范围,因此您可以查看我的个人博客以获取更多详细信息(请参阅“使用Uber的Pyflame和日志解决扩展问题”一文)。免责声明:我是该帖子的作者。