Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright (c) 2012 The Native Client Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import os | |
| 6 import subprocess | |
| 7 import tempfile | |
| 8 | |
| 9 | |
| 10 def DataToReadableHex(data): | |
| 11 """Convert string of bytes to string of hexes ('\xde\xad' -> 'de ad'). | |
| 12 | |
| 13 Args: | |
| 14 data: String (used to represent sequence of bytes). | |
| 15 | |
| 16 Returns: | |
| 17 String of space-separated hex codes. | |
| 18 """ | |
| 19 | |
| 20 return ' '.join('%02x' % ord(c) for c in data) | |
| 21 | |
| 22 | |
| 23 def ReadableHexToData(s): | |
| 24 """Convert string of hexes to string of bytes ('be ef' -> '\xbe\xef'). | |
| 25 | |
| 26 Args: | |
| 27 s: String of space-separated two-character hex codes. | |
| 28 | |
| 29 Returns: | |
| 30 String representing sequence of bytes. | |
| 31 """ | |
| 32 | |
| 33 bytes = s.split() | |
| 34 assert all(len(byte) == 2 for byte in bytes) | |
| 35 return ''.join(chr(int(byte, 16)) for byte in bytes) | |
| 36 | |
| 37 | |
| 38 def CheckOutput(args, **kwargs): | |
| 39 # reimplementation of subprocess.check_output from py 2.7 | |
| 40 assert 'stdout' not in kwargs | |
| 41 | |
| 42 process = subprocess.Popen(args, stdout=subprocess.PIPE, **kwargs) | |
| 43 output, _ = process.communicate() | |
| 44 | |
| 45 if process.returncode != 0: | |
| 46 raise subprocess.CalledProcessError(process.returncode, cmd=args[0]) | |
| 47 | |
| 48 return output | |
| 49 | |
| 50 | |
| 51 # Custom context manager that allows temporary file to be reopened | |
| 52 # and deletes it on exit. | |
| 53 # NamedTemporareFile with delete=True won't do the job because | |
| 54 # it can't be reopened on Windows. | |
| 55 class TempFile(object): | |
| 56 def __init__(self, mode='w+b'): | |
| 57 self.file = tempfile.NamedTemporaryFile(mode=mode, delete=False) | |
| 58 | |
| 59 def __enter__(self): | |
| 60 return self.file | |
| 61 | |
| 62 def __exit__(self, exc_type, ext_value, traceback): | |
|
Mark Seaborn
2012/09/10 19:38:06
Nit: 'ext_value' -> 'exc_value'
Vlad Shcherbina
2012/09/11 14:26:00
Done.
| |
| 63 self.file.close() | |
| 64 if os.path.exists(self.file.name): | |
|
Mark Seaborn
2012/09/10 19:38:06
Nit: can you put a comment in to say which platfor
Vlad Shcherbina
2012/09/11 14:26:00
Done. It's not the platform, but the fact that GNU
| |
| 65 os.remove(self.file.name) | |
| OLD | NEW |