Получить комментарии из файла с помощью python

Я пытаюсь получить комментарии с помощью python. Все, что мне нужно сейчас, это возможность для popen возвращать то, что оболочка обычно выводит, если запускает то же самое. как только у меня есть строка в python, я могу правильно ее отфильтровать.

import sys, os, glob

paths = glob.glob("*.wav")
print paths

for soundFile in paths:
    #soundFile = os.path.abspath(soundFile)
    result = os.popen("xattr -p com.apple.metadata:kMDItemFinderComment "+soundFile+" | xxd -r -p |plutil -convert xml1 -o - -")
    print result

person openCivilisation    schedule 23.09.2012    source источник


Ответы (2)


Я не знаю, что эквивалентно этому в Python, но вы можете использовать xattr для распечатать расширенный атрибут в виде списка свойств XML.

#!/usr/bin/env ruby -KU

require 'cgi'

plist = `xattr -p com.apple.metadata:kMDItemFinderComment test.txt |
xxd -r -p | plutil -convert xml1 -o - -`
puts CGI.unescapeHTML(plist.scan(/<string>(.*?)<\/string>/m)[0][0])

Я забыл о mdls -n kMDItemFinderComment. Finder не в любом случае всегда сохраняйте комментарии в расширенных атрибутах.

person Lri    schedule 24.09.2012
comment
это сближает меня, потому что я могу поместить xattr в popen. но я не знаю, как заставить popen вернуть то, что оболочка обычно возвращает в этой ситуации. - person openCivilisation; 25.09.2012

Я знаю, что этот вопрос был задан несколько месяцев назад, но именно так я получаю доступ к комментариям с помощью Python и popen.

cmd = subprocess.Popen(['mdls', '-name', 'kMDItemFinderComment',pathtofile], stderr=subprocess.STDOUT,stdout = subprocess.PIPE )
out,err = cmd.communicate()

print out

Таким образом, он использует mdls, а не xattr, если это важно для вас, но кажется, что вы могли бы продолжать использовать созданную вами командную строку xattr, если вы просто скажете Popen, куда отправить STDOUT, а затем используете .communicate().

person user2355063    schedule 06.05.2013
comment
Извините, текст не вставился правильно в ответ. После subprocess.PIPE должна быть новая строка) и out,err = ... - person user2355063; 06.05.2013