在macOS Catalina和Python 2下,打开没有xattr的文本文件会给出“不允许操作”

2024-04-28 12:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在运行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

您可能认为file2.txt上缺少xattr使我的计算机确信file2.txt是有毒的,不可信,但Emacs非常乐意打开它

“如果从file1.txt中删除com.apple.macl会怎么样?”您问道。事实证明macOS不允许你这么做,但是there's a workaround。如果我这样做,那么我也会失去用Python读取file1.txt的能力

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

  1. 这是怎么回事?扩展属性真的是罪魁祸首吗
  2. 我怎样才能让Python读取这些良性文件,而我的计算机上的其他程序也很乐意读取这些文件

Tags: 文件pathtxtforosasmacosfilename