比如基于系统 python3 创建了两个 python venv 环境:python3-venv-01, python3-venv-02,那么根据 python 服务的进程号如何查看是属于 python3-venv-01 还是 python3-venv-02 启动的呢?
|
DarkCat123Nov 14, 2020
1
lsof 或者 ls /proc ?
|
|
2
@DarkCat123 试过了,还是没找到~~老哥能具体指点下吗?
|
|
3
readlink /proc/pid/exe
|
|
DarkCat123Nov 14, 2020
4
|
|
zoooNov 14, 2020
5
提供个思路:在 python 中执行系统 shell which python 查看下下 python 执行路径,不同 python 保存的路径不同
|
|
zach14cNov 14, 2020
6
|
|
8
@DoctorCat 是这样的,目前服务器上 python venv 环境比较多,接手了别人的 python 项目,想快速确定是哪个 venv 启动的,查看一些依赖版本之类的~~
|
|
9
@hasdream 查看了下,这种方式获取的都是宿主机的 python 路径,也就是创建各种 venv 的 python 路径,不同 venv 环境启动的应用,exe 都是一样的
|
|
12
@DoctorCat 试验了下上述的方法,不知是不是我理解有问题,似乎不太可行。激活不同 venv 环境,print(sys.base_exec_prefix)都是一样的结果
|
|
zach14cNov 14, 2020
13
~ source p3-2/bin/activate; echo -e "import sys\nprint(sys.exec_prefix)" | python;deactivate;
/home/zach/p3-2 ~ source myp3/bin/activate; echo -e "import sys\nprint(sys.exec_prefix)" | python;deactivate; /home/zach/myp3 |
|
14
strings /proc/pid/environ 看这个进程的环境变量 应该有这个进程是那个虚拟环境的
|
|
kkbblzqNov 15, 2020
15
用 sys.executable 完事
|
|
frostmingNov 15, 2020
16
ls -l /proc/<pid>/cmd
|
|
20
虽然你已经解决了, 顺嘴一提 psutil 的 cmdline 不知道能不能帮到你, 先通过 pid 拿到 Process 对象, 然后看它启动时候命令行参数里面的路径
|
|
21
@ClericPy 谢谢老哥,也是一种很优雅的解决方式
import psutil pp = psutil.Process(16049) print(pp.cmdline()) # 或者 print(pp.environ()) 供其他人参考 |