获取父级sh的路径

2024-06-07 06:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我至少调查过psutil。我试图获取父进程的PID,但是我只得到了当前Python进程的PID。在


Tags: 程序env脚本bashbin进程usrshell
2条回答

使用psutil应该更简单一些:

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

我来解释一下代码:

  • Process(),不带参数,这将为正在运行的进程创建一个Process对象,即Python解释器。在
  • .parent()获取父对象Process(),这可能是外壳。在
  • .exe()获取父进程的可执行文件的路径。在

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

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

import subprocess, re

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

在我的例子中,结果是:

^{pr2}$

然后可以解析该输出以提取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

相关问题 更多 >