获取父shell的路径

问题描述 投票:1回答:2

我正在编写一个Python程序,需要知道执行脚本的shell的可执行位置。例如,我希望找到/usr/bin/env/{bash,zsh,fish}或其他。我该怎么做?

不幸的是,我不能给出一个最小的,完整的,可验证的例子,因为我不知道从哪里开始。我无法在网上找到任何东西。

我至少看过psutil。我试图获取父进程的PID,但我刚刚得到了当前Python进程的PID。

python python-3.x process parent pid
2个回答
1
投票

使用psutil应该或多或少直截了当:

import psutil
print(psutil.Process().parent().exe())

让我解释一下代码:

  • Process(),没有参数,这为正在运行的进程创建了一个Process对象,即Python解释器。
  • .parent()得到了父亲Process(),这可能是贝壳。
  • .exe()获取父进程可执行文件的路径。

根据您的设置,您可能需要一些额外的路径,但对于最简单的情况,这应该足够了。


0
投票

您可以使用subprocess模块获取ps命令的输出:

import subprocess, re

psoutput = subprocess.check_output(['ps','-o','pid,cmd'])

在我的情况下输出:

  PID CMD
 9650 bash
10290 python app.py
10291 ps -o pid,cmd

然后你可以解析该输出以提取shell PID:

pid = re.findall('\s*(\d+)\s*(bash|zsh|fish)',psoutput)[0][0]

在我的情况下输出9650

从PID中,您可以像这样提取路径(在我的情况下PID = 9650):

path = subprocess.check_output(['readlink','-f','/proc/'+pid+'/exe'])

在我的情况下输出:

/bin/bash
© www.soinside.com 2019 - 2024. All rights reserved.