seven.py
1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import binascii
import six
if six.PY2:
import commands
get_command_output = commands.getoutput
get_command_status_output = commands.getstatusoutput
cmp_ = cmp
else:
def get_command_status_output(command):
try:
import subprocess
return (
0,
subprocess.check_output(
command,
shell=True,
universal_newlines=True).rstrip())
except subprocess.CalledProcessError as e:
return (e.returncode, e.output)
def get_command_output(command):
return get_command_status_output(command)[1]
cmp_ = lambda x, y: (x > y) - (x < y)
def bitcast_to_string(b):
"""
Take a string(PY2) or a bytes(PY3) object and return a string. The returned
string contains the exact same bytes as the input object (latin1 <-> unicode
transformation is an identity operation for the first 256 code points).
"""
return b if six.PY2 else b.decode("latin1")
def bitcast_to_bytes(s):
"""
Take a string and return a string(PY2) or a bytes(PY3) object. The returned
object contains the exact same bytes as the input string. (latin1 <->
unicode transformation is an identity operation for the first 256 code
points).
"""
return s if six.PY2 else s.encode("latin1")
def unhexlify(hexstr):
"""Hex-decode a string. The result is always a string."""
return bitcast_to_string(binascii.unhexlify(hexstr))
def hexlify(data):
"""Hex-encode string data. The result if always a string."""
return bitcast_to_string(binascii.hexlify(bitcast_to_bytes(data)))