convert: Split command in `str` form
...with yet another round-trip conversion. :/
@@ -206,8 +206,15 @@ class ConvertPlugin(BeetsPlugin):
source = decode_commandline_path(source)
dest = decode_commandline_path(dest)
+ # Split the command using shell syntax. We need to pass the
+ # string through a `str` because, at least on some Python
+ # versions, shlex.split does not support bytes.
+ args = [
+ a.encode('utf8', 'surrogateescape')
+ for a in shlex.split(command.decode('utf8', 'surrogateescape'))
+ ]
+
# Substitute $source and $dest in the argument list.
- args = shlex.split(command)
encode_cmd = []
for i, arg in enumerate(args):
args[i] = Template(arg).safe_substitute({
