跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问如何判断启动某个 Python 进程的 Python 环境位置呢?
未分類
13 11 月 2020

请问如何判断启动某个 Python 进程的 Python 环境位置呢?

请问如何判断启动某个 Python 进程的 Python 环境位置呢?

資深大佬 : leonme 3

比如基于系统 python3 创建了两个 python venv 环境:python3-venv-01, python3-venv-02,那么根据 python 服务的进程号如何查看是属于 python3-venv-01 还是 python3-venv-02 启动的呢?
大佬有話說 (23)

  • 資深大佬 : DarkCat123

    lsof 或者 ls /proc ?

  • 主 資深大佬 : leonme

    @DarkCat123 试过了,还是没找到~~老哥能具体指点下吗?

  • 資深大佬 : hasdream

    readlink /proc/pid/exe

  • 資深大佬 : DarkCat123

    @leonme 我对 python 不太熟。
    不过本质上来说这个还是看这玩意儿被软连接到哪个环境去了。
    所以通过 proc/{pid} 是可以看到里面的软连接情况,能看到到底是连接到哪里去了

  • 資深大佬 : zooo

    提供个思路:在 python 中执行系统 shell which python 查看下下 python 执行路径,不同 python 保存的路径不同

  • 資深大佬 : zach14c

    sys.base_exec_prefix
    from python manual:
    >在 python 启动期间设置,在 site.py 运行,值与 exec_prefix . 如果不是在 virtual environment 值将保持不变;如果 site.py 查找正在使用的虚拟环境,值为 prefix 和 exec_prefix 将更改为指向虚拟环境,而 base_prefix 和 base_exec_prefix 将继续指向基本的 python 安装(从中创建虚拟环境的安装

  • 資深大佬 : DoctorCat

    X-Y problems
    为何一定通过进程号?一定这样?如果是解决你标题提到的问题,
    @zach14c 提供的方法是 ok 的

  • 主 資深大佬 : leonme

    @DoctorCat 是这样的,目前服务器上 python venv 环境比较多,接手了别人的 python 项目,想快速确定是哪个 venv 启动的,查看一些依赖版本之类的~~

  • 主 資深大佬 : leonme

    @hasdream 查看了下,这种方式获取的都是宿主机的 python 路径,也就是创建各种 venv 的 python 路径,不同 venv 环境启动的应用,exe 都是一样的

  • 主 資深大佬 : leonme

    @zooo 可以在不更改代码的情况下的确定吗?

  • 主 資深大佬 : leonme

    @zach14c 激活不同 venv 环境,print(sys.base_exec_prefix)都是一样的结果

  • 主 資深大佬 : leonme

    @DoctorCat 试验了下上述的方法,不知是不是我理解有问题,似乎不太可行。激活不同 venv 环境,print(sys.base_exec_prefix)都是一样的结果

  • 資深大佬 : zach14c

    ~  source p3-2/bin/activate; echo -e “import sysnprint(sys.exec_prefix)” | python;deactivate;
    /home/zach/p3-2
    ~  source myp3/bin/activate; echo -e “import sysnprint(sys.exec_prefix)” | python;deactivate;
    /home/zach/myp3

  • 資深大佬 : hasdream

    strings /proc/pid/environ 看这个进程的环境变量 应该有这个进程是那个虚拟环境的

  • 資深大佬 : kkbblzq

    用 sys.executable 完事

  • 資深大佬 : frostming

    ls -l /proc/<pid>/cmd

  • 主 資深大佬 : leonme

    @hasdream 多谢老哥,很赞~~请教下这些东西是看哪些书了解到的呢?

  • 主 資深大佬 : leonme

    @frostming 没看到有 cmd 这个文件

  • 主 資深大佬 : leonme

    @kkbblzq 不改代码的情况下通过 python 进程的 pid 查找 python 路径哈

  • 資深大佬 : ClericPy

    虽然你已经解决了, 顺嘴一提 psutil 的 cmdline 不知道能不能帮到你, 先通过 pid 拿到 Process 对象, 然后看它启动时候命令行参数里面的路径

  • 主 資深大佬 : leonme

    @ClericPy 谢谢老哥,也是一种很优雅的解决方式

    import psutil
    pp = psutil.Process(16049)
    print(pp.cmdline())
    # 或者 print(pp.environ())

    供其他人参考

  • 資深大佬 : hasdream

    @leonme man proc

  • 資深大佬 : frostming

    @leonme psutil 的东西也是从 /proc 下读的
    比如
    cat /proc/<pid>/cmdline
    cat /proc/<pid>/environ

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具