python - 如何在没有系统特定的情况下获得 pathlib 的 unix 路径处理好东西,例如 Path.resolve() changes/tmp to/private/tmp

标签 python python-3.x macos pathlib

遇到一个有趣的 pathlib 案例,我用它来表示 android 设备上的路径,而不是 python 正在运行的机器。是否仍然可以利用 pathlib 的含糖语法和解决 unix 范围内的老生常谈的能力,例如相对路径“../../”而不解决设备特定的符号链接(symbolic link),例如“/tmp/path”->“/private/tmp/路径”?

在大多数情况下,pathlib 使处理设备上的路径变得非常容易,但是当我想在不使用主机 python 机器的符号链接(symbolic link)解析机制的情况下解析设备上的路径时遇到了问题。

我喜欢使用 pathlib 而不是字符串。是否可以使用 Path 对象进行路径操作和操作,然后将最终文件命令发送到 ssh 进入的设备?

我唯一想要的 resolve 是能够转 (Path(“/tmp/analysis/ptool”)/“../../“).resolve 照顾 .. 但不改变/tmp 到/private/tmp,这不是我要使用此路径命令的设备上的符号链接(symbolic link)。

这个例子有点微不足道“只用字符串来做”,但我想应用它的组织和自动化明显更清晰,更容易阅读为 Path 对象而不是字符串。如果可能的话,让它发挥作用就太好了。

In [1]: import pathlib

In [2]: from pathlib import Path

In [3]: Path('/tmp/hello').resolve()
Out[3]: PosixPath('/private/tmp/hello')

enter image description here

MacOS, Python3.7.3

最佳答案

/private/tmp/tmp 内容实际存储在 Mac OS 上的地方。在这个平台上,/tmp 是一个符号链接(symbolic link)。您可以从操作系统中看到这一点,而无需使用 Python:

$ ls -l /tmp
lrwxr-xr-x 1 root wheel 11 Oct 22  2018 /tmp -> private/tmp
$ (cd /tmp && pwd -P)
/private/tmp

pathlib.Path.resolve()用符号链接(symbolic link)指向的绝对路径替换符号链接(symbolic link),因此它完全符合您的要求。

参见 Why is /tmp a symlink to /private/tmp?在我们的姊妹网站上 Ask Different .

关于python - 如何在没有系统特定的情况下获得 pathlib 的 unix 路径处理好东西,例如 Path.resolve() changes/tmp to/private/tmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57014815/

相关文章:

python - 在 Python 中更新字典

Python:返回每个匹配项的列表值

python - 在 Python 中将日期作为一行数据透视

python - 导入错误: No module named even after I appended to system path

macos - 苹果操作系统 : Install vue cli does work properly

ios - 将设置 TableView 从 iOS 应用程序移植到 mac

python - 将全局包导入到我创建的虚拟环境中的选项?

python - 我如何判断一个类是否有方法 `__call__` ?

macos - "You should probably ` chown`them"是什么意思?

python - 拆分文本而不删除分隔符