如何使用 Python 获取 unix 域套接字的路径
How to get the path of a unix domain socket using Python
所以,我正在为一个项目使用 podman-py
库。为了使用它,我需要为 libpod 服务提供一个 URI 路径。此 URI 具有以下形式:
"unix:///run/user/<some-id>/podman/podman.sock"
目前,我在安装 podman-remote
:
后通过 运行 我的服务器上的这个命令得到这个 URI
systemctl --user status podman.socket
然后我得到以下输出,从中我得到了 podman.sock
的路径:
● podman.socket - Podman API Socket
Loaded: loaded (/usr/lib/systemd/user/podman.socket; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:podman-system-service(1)
Listen: /run/user/0/podman/podman.sock (Stream)
现在我已经在我的代码中硬编码了这个 URI。然而,更多的人会使用这个项目,我想动态获取路径,以防它因服务器而异。我当然可以只执行命令并使用 Python grep 我想要的内容,但我想知道在使用此解决方案之前是否有更好的选择。
谢谢!
理想情况下,您可以导入一个 systemctl 模块,无需花钱就能做到这一点。
您需要的信息是 'show' 命令输出中的 Listen
元素:
$ systemctl --user show pulseaudio.socket|grep -i listen
Listen=/run/user/101346/pulse/native (Stream)
获取此信息的 quick-n-dirty 黑客可能如下所示:
import subprocess
args=["/usr/bin/systemctl", "--user", "show", "pulseaudio.socket"]
command = subprocess.Popen(args, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = command.communicate()
lines = stdout.splitlines()
listen = [str(l) for l in allstatus if l.startswith(b'Listen') ]
mysocket = listen[0].split("=")[1].split(" ")[0]
这将表明我的用户 ID 具有 pulseaudio 套接字:
>>> mysocket
'/run/user/101346/pulse/native'
所以,我正在为一个项目使用 podman-py
库。为了使用它,我需要为 libpod 服务提供一个 URI 路径。此 URI 具有以下形式:
"unix:///run/user/<some-id>/podman/podman.sock"
目前,我在安装 podman-remote
:
systemctl --user status podman.socket
然后我得到以下输出,从中我得到了 podman.sock
的路径:
● podman.socket - Podman API Socket
Loaded: loaded (/usr/lib/systemd/user/podman.socket; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:podman-system-service(1)
Listen: /run/user/0/podman/podman.sock (Stream)
现在我已经在我的代码中硬编码了这个 URI。然而,更多的人会使用这个项目,我想动态获取路径,以防它因服务器而异。我当然可以只执行命令并使用 Python grep 我想要的内容,但我想知道在使用此解决方案之前是否有更好的选择。
谢谢!
理想情况下,您可以导入一个 systemctl 模块,无需花钱就能做到这一点。
您需要的信息是 'show' 命令输出中的 Listen
元素:
$ systemctl --user show pulseaudio.socket|grep -i listen
Listen=/run/user/101346/pulse/native (Stream)
获取此信息的 quick-n-dirty 黑客可能如下所示:
import subprocess
args=["/usr/bin/systemctl", "--user", "show", "pulseaudio.socket"]
command = subprocess.Popen(args, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = command.communicate()
lines = stdout.splitlines()
listen = [str(l) for l in allstatus if l.startswith(b'Listen') ]
mysocket = listen[0].split("=")[1].split(" ")[0]
这将表明我的用户 ID 具有 pulseaudio 套接字:
>>> mysocket
'/run/user/101346/pulse/native'