import subprocess
import tempfile
from errno import EEXIST
-from subprocess import Popen, PIPE
from flac_archive.tags import Tags
Exception.__init__(self, msg % (abs(status), command_msg))
self.status = status
self.command = command
- self.stderr = stderr
+ self.stderr = ''.join(stderr)
def get_tags(fn):
tags = Tags()
command = ['metaflac', '--no-utf8-convert', '--export-tags-to=-', fn]
- p = Popen(command, stdout=PIPE)
+ p = subprocess.Popen(command, stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
tags.load(p.stdout)
status = p.wait()
if status != 0:
- raise SubprocessError(status, command=command, stderr=p.stderr)
+ raise SubprocessError(status, command=command, stderr=p.stdout)
return tags
tmp.close()
command = ['metaflac', '--no-utf8-convert', '--dont-use-padding',
'--remove-all-tags', '--import-tags-from', tmp.name, fn]
- p = Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- stdout, stderr = p.communicate()
+ p = subprocess.Popen(command, stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
status = p.wait()
if status != 0:
- raise SubprocessError(status, command=command, stderr=stdout)
+ raise SubprocessError(status, command=command, stderr=p.stdout)
def do_read(filenames):
# Use this mapping of tag names to sets of tag values to detect global tags.
# this check belongs in Tags
if len(track_tags) != 1:
sys.stderr.write('bogus TRACKNUMBER %s: %s\n' % (track_tags, fn))
- return 3
+ return 4
track = int(track_tags[0])
for tag, values in tags._global.iteritems():
# Makes no sense to save TRACKNUMBER in coll_tags.
if len(args) != len(tags):
sys.stderr.write('expected %d flac files, got %d\n'
% (len(tags), len(args)))
- return 4
+ return 2
artist = tags.get_path_safe('ARTIST')
album = tags.get_path_safe('ALBUM')
try:
def main(args):
if len(args) < 3:
return usage()
- if args[1] == 'read':
- return do_read(args[2:])
- if args[1] == 'write':
- return do_write(args[2:])
+ try:
+ if args[1] == 'read':
+ return do_read(args[2:])
+ if args[1] == 'write':
+ return do_write(args[2:])
+ except SubprocessError, e:
+ sys.stderr.write('%s\n%s\n' % (e.stderr, e))
+ return 3
return usage()
def usage():