1

在运行 macOS Catalina 10.15.6 的机器上,我一直无法让 Python(在这种情况下是 Python 2)打开一些文件。我把问题归结为以下几点。我有两个明显相同的文本文件,但 xattr 不同。Python 愿意打开一个而不是另一个。这是我的代码:

import os, subprocess

for filename in ["file1.txt", "file2.txt"]:
    path = os.path.join(os.path.expanduser("~/Downloads/"+filename))
    assert os.path.isfile(path)
    print(filename, " attr:", oct(os.stat(path).st_mode & 0o777))
    print(filename, "xattr:", subprocess.check_output(["xattr", path]).strip())
    try:
        with open(path) as infile:
            print("Succeeded for file", filename)
    except IOError as ioe:
        print(ioe.args[1], "for", filename)

这是输出:

file1.txt  attr: 0777
file1.txt xattr: com.apple.macl
Succeeded for file file1.txt
file2.txt  attr: 0777
file2.txt xattr: 
Operation not permitted for file2.txt

您可能认为缺少 xattr on 使file2.txt我的计算机相信 file2.txt 是有毒的并且不能被信任,但 Emacs 非常乐意打开它。

“如果你删除com.apple.maclfromfile1.txt怎么办?”,你问。好吧,事实证明 macOS 不允许您这样做,但有一个解决方法。如果我这样做了,我也会失去file1.txt用 Python 阅读的能力。

我无法读取的文件是在没有恶意的情况下创建的——例如,在 Emacs 中创建的文件就得到了这种处理。我在想:

  1. 这里发生了什么?扩展属性真的是罪魁祸首吗?
  2. 如何让 Python 读取我计算机上的其他程序乐于阅读的这些良性文件?
4

0 回答 0