提问人:Jacob Birkett 提问时间:3/31/2019 最后编辑:Jacob Birkett 更新时间:4/3/2019 访问量:1132
获取父 shell 的路径
Get the path of the parent shell
问:
我正在编写一个 Python 程序,它需要知道执行脚本的 shell 的可执行位置。例如,我希望找到或其他方式。我该怎么做?/usr/bin/env/{bash,zsh,fish}
不幸的是,我无法给出一个最小、完整和可验证的例子,因为我不知道从哪里开始。我在网上找不到任何东西。
至少我已经调查过了。我试图获取父进程的 PID,但我刚刚获得了当前 Python 进程的 PID。psutil
答:
0赞
glhr
3/31/2019
#1
您可以使用该模块获取命令的输出: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
4赞
rodrigo
3/31/2019
#2
使用应该或多或少简单明了:psutil
import psutil
print(psutil.Process().parent().exe())
让我解释一下代码:
Process()
,如果没有参数,这将为正在运行的进程创建一个对象,即 Python 解释器。Process
.parent()
获取父级,那大概就是shell。Process()
.exe()
获取父进程的可执行文件的路径。
根据您的设置,您可能需要一些额外的路径,但对于最简单的情况来说,这应该足够了。
评论
0赞
Jacob Birkett
4/1/2019
我接受这个答案不是因为其他答案不起作用,而是因为分步解释。虽然我没有必要理解它,但这个解释可能会帮助将来遇到这个问题的任何人。它也是交叉的,而使用命令的解决方案则不是。ps
评论
import os; os.getcwd()
?SHELL