首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python xattr没有属性列表

Python xattr没有属性列表
EN

Stack Overflow用户
提问于 2018-09-19 10:38:07
回答 1查看 2.4K关注 0票数 3

我编写了一个脚本,它通过模块xattr在一些文件上设置扩展属性。我成功地在python3中的Ubuntu中测试了它,但是它不能在我的RasperryPi上工作。

我不得不改变几十个小错误,大多是像xattr not knowing its methods

例如,xattr.set(...) has to be changed to xattr.setattr(...)。但我没能把他们列出来。因此,我尝试了一些基本的方法,并得到了错误:

代码语言:javascript
复制
import xattr
xattr.list('files.py')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'xattr' has no attribute 'list'

我的想法是python可能使用了错误的模块(用于python2.7而不是3?)。因此,我试图卸载2.7模块,但得到了如下结果:

代码语言:javascript
复制
...$ pip uninstall xattr
Traceback (most recent call last):
File "/usr/local/bin/pip", line 7, in <module>
from pip._internal import main
ImportError: No module named _internal

但是我可以成功地卸载python3包。在那之后,即使在python3中,“导入xattr”仍然有效吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-30 10:08:42

凌晨3点,听着乱七八糟的暴徒,因为好奇,我掉进了兔子洞.我想给出我的代码示例,以使用python构建的xattr模块。

创建一个名为xattr_example.py的文件,并将此代码放入其中,然后运行该文件。

文件:

代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# =============================================================================
"""The Following Is An Example for xattr."""
# =============================================================================

import xattr

print("{}".format(xattr.__file__))
# '/usr/local/lib/python3.7/site-packages/xattr/__init__.py'


def showww_me_the_meta(file_name):
    """Using Python's XATTR to list Key Meta Names for File."""
    print("Showing Initial Names & Values.")
    attrz = xattr.listxattr(file_name)
    result = ("A. Info Showcased Init: {}".format(attrz))
    print("{}".format(result))
    return result


def update_the_meta(file_name):
    """Using Python's XATTR to Update Key Meta Names for File."""
    xattr.setxattr(file_name, 'custom.comment',
                   'I tawt I taw a puddy tat!.'.encode('utf-8'))
    xattr.setxattr(file_name, 'Music.Artist',
                   'I did! '
                   'I did taw a puddy tat!'.encode('utf-8'))
    get_the_meta_values(file_name)
    return


def get_the_meta_values(file_name):
    """Example."""
    print("B. Listing Meta for: {}".format(file_name))
    attrz = xattr.listxattr(file_name)
    print("")
    for i in reversed(attrz):
        abc = xattr.getxattr(file_name, i)
        result = ("{} : {}".format(i, abc))
        print("   {}".format(result))
    print("")
    return


def remove_the_meta(file_name):
    """Example."""
    xattr.removexattr(file_name, 'custom.comment')
    xattr.removexattr(file_name, 'Music.Artist')
    attrz = xattr.listxattr(file_name)
    result = ("C. Info Removed Meta: {}".format(attrz))
    print("{}".format(result))
    return result


if __name__ == '__main__':
    showww_me_the_meta('xattr_example.py')
    update_the_meta('xattr_example.py')
    remove_the_meta('xattr_example.py')

运行该文件的结果是:

代码语言:javascript
复制
$ python3 xattr_example.py
/usr/local/lib/python3.7/site-packages/xattr/__init__.py
Showing Initial Names & Values.
A. Info Showcased Init: ()
B. Listing Meta for: xattr_example.py

   custom.comment : b'I tawt I taw a puddy tat!.'
   Music.Artist : b'I did! I did taw a puddy tat!'

C. Info Removed Meta: ()

最后

至于"import xattr" still worked even in python3?,请注意这两个版本都可以安装python,但是路径不同。

代码语言:javascript
复制
python -V
# Python 2.7.16
which python
# /usr/local/bin/python

代码语言:javascript
复制
python3 -V
Python 3.7.4
which python3
/usr/local/bin/python3

如果列出了多个版本,则在调用python时必须分别使用pythonpython3。我正在开发Mac,所以两者都有,但是这个脚本是用python3编写的。

参考文献:

希望这能帮上忙!祝你过得很好!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52403922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档