2024-06-07 06:25:10 发布
网友
我正在编写一个Python程序,它需要知道执行脚本的shell的可执行位置。例如,我希望找到/usr/bin/env/{bash,zsh,fish}或其他。我该怎么做?在
/usr/bin/env/{bash,zsh,fish}
不幸的是,我不能给出一个最小的,完整的,可验证的例子,因为我不知道从哪里开始。我在网上找不到任何东西。在
我至少调查过psutil。我试图获取父进程的PID,但是我只得到了当前Python进程的PID。在
psutil
使用psutil应该更简单一些:
import psutil print(psutil.Process().parent().exe())
我来解释一下代码:
Process()
Process
.parent()
.exe()
根据您的设置,您可能需要一些额外的路径,但对于最简单的情况,这已经足够了。在
您可以使用subprocess模块获得ps命令的输出:
subprocess
ps
import subprocess, re psoutput = subprocess.check_output(['ps','-o','pid,cmd'])
在我的例子中,结果是:
然后可以解析该输出以提取shell PID:
pid = re.findall('\s*(\d+)\s*(bash|zsh|fish)',psoutput)[0][0]
在我的例子中,它输出9650。在
9650
从PID中,可以像这样提取路径(在我的例子中PID=9650):
path = subprocess.check_output(['readlink','-f','/proc/'+pid+'/exe'])
在我的案例中:
/bin/bash
使用
psutil
应该更简单一些:我来解释一下代码:
Process()
,不带参数,这将为正在运行的进程创建一个Process
对象,即Python解释器。在.parent()
获取父对象Process()
,这可能是外壳。在.exe()
获取父进程的可执行文件的路径。在根据您的设置,您可能需要一些额外的路径,但对于最简单的情况,这已经足够了。在
您可以使用
subprocess
模块获得ps
命令的输出:在我的例子中,结果是:
^{pr2}$然后可以解析该输出以提取shell PID:
在我的例子中,它输出
9650
。在从PID中,可以像这样提取路径(在我的例子中PID=9650):
在我的案例中:
相关问题 更多 >
编程相关推荐