On Sep 29, 2016, at 01:14 PM, Allan Odgaard <mailinglist@textmate.org> wrote:

On 29 Sep 2016, at 12:11, Per Persson wrote:

It works mostly well, but trying to parse a command file that contains a command mapped to the escape key using plistlib/biplist fails with an exception:
Any clues how to handle this?

The issue is that XML does not allow ASCII control characters (and python checks this). XML 1.1 should allow them when entity-encoded, but both python 2.7.12 and 3.5.2 still throw an exception (for &#x1B;) in my test.

The biplist is using plistlib for XML property lists, so it may actually work for binary property lists.

So when encountering this exception, you could try convert the property list to its binary form (using plutil) and see if that works.

You could also look into using PyObjC and import NSDictionary, this should definitely read the file without problems.

Thanks Allan,
plutil did the trick. In fact it could actually convert the plist file to JSON with the escape properly escaped (pun intended;) 
For the records, this is what I ended up with (no need for plistlib/biplist):

def json_from_plist(path):
   p = Popen(['plutil', '-convert', 'json', path, '-o', '-'], stdout=PIPE, stderr=PIPE)
   res, err = p.communicate()
   return json.loads(res) if not err else {}


textmate mailing list