Redo bin/num so it prints JSON
This commit is contained in:
parent
858b9e1b40
commit
fabcbec363
1 changed files with 51 additions and 46 deletions
77
bin/num
77
bin/num
|
@ -1,35 +1,19 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
import os.path
|
import os.path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
BIN_FMT = 2
|
FORMATS = {
|
||||||
OCT_FMT = 8
|
'bin': 2,
|
||||||
DEC_FMT = 10
|
'oct': 8,
|
||||||
HEX_FMT = 16
|
'dec': 10,
|
||||||
|
'hex': 16,
|
||||||
|
}
|
||||||
|
|
||||||
|
def handle_number(n):
|
||||||
def main():
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print('Usage: {} <num> [num...]'.format(sys.argv[0]))
|
|
||||||
return -1
|
|
||||||
|
|
||||||
root = os.path.splitext(os.path.basename(sys.argv[0]))[0]
|
|
||||||
|
|
||||||
if root == 'bin':
|
|
||||||
fmts = {BIN_FMT}
|
|
||||||
elif root == 'oct':
|
|
||||||
fmts = {OCT_FMT}
|
|
||||||
elif root == 'dec':
|
|
||||||
fmts = {DEC_FMT}
|
|
||||||
elif root == 'hex':
|
|
||||||
fmts = {HEX_FMT}
|
|
||||||
else:
|
|
||||||
# All formats
|
|
||||||
fmts = {BIN_FMT, OCT_FMT, DEC_FMT, HEX_FMT}
|
|
||||||
|
|
||||||
for n in sys.argv[1:]:
|
|
||||||
print('---')
|
|
||||||
try:
|
try:
|
||||||
base = 10
|
base = 10
|
||||||
n = n.lower()
|
n = n.lower()
|
||||||
|
@ -43,17 +27,38 @@ def main():
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print('Error: cannot parse string as int: {}'.format(n))
|
print('Error: cannot parse string as int: {}'.format(n))
|
||||||
else:
|
else:
|
||||||
if BIN_FMT in fmts:
|
return {
|
||||||
print('bin: {}'.format(bin(num)[2:]))
|
'bin': str(bin(num)[2:]),
|
||||||
if OCT_FMT in fmts:
|
'oct': str(oct(num)[2:]),
|
||||||
print('oct: {}'.format(oct(num)[2:]))
|
'dec': str(num),
|
||||||
if DEC_FMT in fmts:
|
'hex': str(hex(num)[2:]),
|
||||||
print('int: {}'.format(num))
|
}
|
||||||
if HEX_FMT in fmts:
|
|
||||||
print('hex: {}'.format(hex(num)[2:]))
|
def parse_args(argv, *a, **kw):
|
||||||
|
parser = argparse.ArgumentParser(*a, **kw)
|
||||||
|
parser.add_argument('--ascii', '-a', action='store_true')
|
||||||
|
parser.add_argument('numbers', nargs='+')
|
||||||
|
args = parser.parse_args(argv)
|
||||||
|
return args
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
args = parse_args(argv[1:], prog=argv[0])
|
||||||
|
|
||||||
|
output = {}
|
||||||
|
|
||||||
|
for n in args.numbers:
|
||||||
|
if args.ascii:
|
||||||
|
for c in n:
|
||||||
|
output.setdefault(c, handle_number(str(ord(c))))
|
||||||
|
else:
|
||||||
|
output.setdefault(n, handle_number(n))
|
||||||
|
|
||||||
|
json.dump(output, sys.stdout, indent=2)
|
||||||
|
print('\n')
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main())
|
import sys
|
||||||
|
result = main(sys.argv)
|
||||||
|
sys.exit(0 if not result else result)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue