获取父路径 shell
Get the path of the parent shell
我正在编写一个 Python 程序,它需要知道执行脚本的 shell 的可执行位置。例如,我希望找到 /usr/bin/env/{bash,zsh,fish}
或其他。我该怎么做?
不幸的是,我无法给出一个最小的、完整的和可验证的例子,因为我不知道从哪里开始。我在网上找不到任何东西。
至少我调查过 psutil
。我试图获取父进程的 PID,但我只是获取了当前 Python 进程的 PID。
您可以使用 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
使用 psutil
应该或多或少简单明了:
import psutil
print(psutil.Process().parent().exe())
让我解释一下代码:
Process()
,没有参数,这会为 运行 进程创建一个 Process
对象,即 Python 解释器。
.parent()
得到父 Process()
,那可能就是 shell.
.exe()
获取父进程可执行文件的路径
根据您的设置,您可能需要一些额外的路径,但这对于最简单的情况应该足够了。
我正在编写一个 Python 程序,它需要知道执行脚本的 shell 的可执行位置。例如,我希望找到 /usr/bin/env/{bash,zsh,fish}
或其他。我该怎么做?
不幸的是,我无法给出一个最小的、完整的和可验证的例子,因为我不知道从哪里开始。我在网上找不到任何东西。
至少我调查过 psutil
。我试图获取父进程的 PID,但我只是获取了当前 Python 进程的 PID。
您可以使用 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
使用 psutil
应该或多或少简单明了:
import psutil
print(psutil.Process().parent().exe())
让我解释一下代码:
Process()
,没有参数,这会为 运行 进程创建一个Process
对象,即 Python 解释器。.parent()
得到父Process()
,那可能就是 shell..exe()
获取父进程可执行文件的路径
根据您的设置,您可能需要一些额外的路径,但这对于最简单的情况应该足够了。