我编写了一个脚本,该脚本使用模块xattr
在某些文件上设置扩展属性。我已经在python3中的Ubuntu中成功测试了它,但是在我的RasperryPi上无法使用。
我不得不更改许多小错误,大部分是xattr not knowing its methods
。
例如xattr.set(...) has to be changed to xattr.setattr(...)
。但是我没有列出它们。所以我尝试了基础知识并得到了错误:
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使用了错误的模块(对于python 2.7而不是3?)。因此,我尝试卸载2.7模块,但得到了以下信息:
...$ 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”仍然有效?
最佳答案
它的凌晨3点,聆听小故障,由于好奇心而我掉进了这个兔子洞...我想给你我的代码示例,以使用python内置的xattr
模块。
创建一个名为xattr_example.py
的文件,并将此代码放入其中,然后运行该文件。
文件:
#!/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')
运行文件的结果是:
$ 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,但路径不同。python -V
# Python 2.7.16
which python
# /usr/local/bin/python
和
python3 -V
Python 3.7.4
which python3
/usr/local/bin/python3
如果列出了多个版本,则在调用
python
时必须分别使用python3
或python
。我正在Mac OSX上工作,所以两者兼有,但是此脚本是用python3
编写的。参考文献:
Manual Pages
Using the xattr functions to get extended attributes. link from SO answer.
Limitations
我只能找到usage examples。
希望有帮助!有一个很棒的!
关于python - Python模块xattr没有属性列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52403922/