%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#!/usr/bin/python3
from __future__ import (unicode_literals, absolute_import,
print_function, division)
import sys
if sys.version_info.major == 2:
reload(sys)
sys.setdefaultencoding('utf-8')
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)
import argparse
import json
import re
from collections import Iterable
try:
from . import __version__
except (ImportError, ValueError, SystemError):
__version__ = '???' # NOQA
__version_info__ = '''Pythonpy %s
Python %s''' % (__version__, sys.version.split(' ')[0])
def import_matches(query, prefix=''):
matches = set(re.findall(r"(%s[a-zA-Z_][a-zA-Z0-9_]*)\.?" % prefix, query))
for raw_module_name in matches:
if re.match('np(\..*)?$', raw_module_name):
module_name = re.sub('^np', 'numpy', raw_module_name)
elif re.match('pd(\..*)?$', raw_module_name):
module_name = re.sub('^pd', 'pandas', raw_module_name)
else:
module_name = raw_module_name
try:
module = __import__(module_name)
globals()[raw_module_name] = module
import_matches(query, prefix='%s.' % module_name)
except ImportError as e:
pass
def lazy_imports(*args):
query = ' '.join([x for x in args if x])
import_matches(query)
def current_list(input):
return re.split(r'[^a-zA-Z0-9_\.]', input)
def inspect_source(obj):
import inspect
import pydoc
try:
pydoc.pager(''.join(inspect.getsourcelines(obj)[0]))
return None
except:
return help(obj)
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
add_help=False)
group = parser.add_argument_group("Options")
parser.add_argument('expression', nargs='?', default='None', help="e.g. py '2 ** 32'")
group.add_argument('-x', dest='lines_of_stdin', action='store_const',
const=True, default=False,
help='treat each row of stdin as x')
group.add_argument('-fx', dest='filter_result', action='store_const',
const=True, default=False,
help=argparse.SUPPRESS)
group.add_argument('-l', dest='list_of_stdin', action='store_const',
const=True, default=False,
help='treat list of stdin as l')
group.add_argument('--ji', '--json_input',
dest='json_input', action='store_const',
const=True, default=False,
help=argparse.SUPPRESS)
group.add_argument('--jo', '--json_output',
dest='json_output', action='store_const',
const=True, default=False,
help=argparse.SUPPRESS)
group.add_argument('--si', '--split_input', dest='input_delimiter',
help=argparse.SUPPRESS)
group.add_argument('--so', '--split_output', dest='output_delimiter',
help=argparse.SUPPRESS)
group.add_argument('-c', dest='pre_cmd', help='run code before expression')
group.add_argument('-C', dest='post_cmd', help='run code after expression')
group.add_argument('--i', '--ignore_exceptions',
dest='ignore_exceptions', action='store_const',
const=True, default=False,
help=argparse.SUPPRESS)
group.add_argument('-V', '--version', action='version', version=__version_info__, help='version info')
group.add_argument('-h', '--help', action='help', help="show this help message and exit")
try:
args = parser.parse_args()
if sum([args.list_of_stdin, args.lines_of_stdin, args.filter_result]) > 1:
sys.stderr.write('Pythonpy accepts at most one of [-x, -l] flags\n')
sys.exit(1)
if args.json_input:
def loads(str_):
try:
return json.loads(str_.rstrip())
except Exception as ex:
if args.ignore_exceptions:
pass
else:
raise ex
stdin = (loads(x) for x in sys.stdin)
elif args.input_delimiter:
stdin = (re.split(args.input_delimiter, x.rstrip()) for x in sys.stdin)
else:
stdin = (x.rstrip() for x in sys.stdin)
if args.expression:
args.expression = args.expression.replace("`", "'")
if args.expression.startswith('?') or args.expression.endswith('?'):
final_atom = current_list(args.expression.rstrip('?'))[-1]
first_atom = current_list(args.expression.lstrip('?'))[0]
if args.expression.startswith('??'):
import inspect
args.expression = "inspect_source(%s)" % first_atom
elif args.expression.endswith('??'):
import inspect
args.expression = "inspect_source(%s)" % final_atom
elif args.expression.startswith('?'):
args.expression = 'help(%s)' % first_atom
else:
args.expression = 'help(%s)' % final_atom
if args.lines_of_stdin:
from itertools import islice
stdin = islice(stdin,1)
if args.pre_cmd:
args.pre_cmd = args.pre_cmd.replace("`", "'")
if args.post_cmd:
args.post_cmd = args.post_cmd.replace("`", "'")
lazy_imports(args.expression, args.pre_cmd, args.post_cmd)
if args.pre_cmd:
exec(args.pre_cmd)
def safe_eval(text, x):
try:
return eval(text)
except:
return None
if args.lines_of_stdin:
if args.ignore_exceptions:
result = (safe_eval(args.expression, x) for x in stdin)
else:
result = (eval(args.expression) for x in stdin)
elif args.filter_result:
if args.ignore_exceptions:
result = (x for x in stdin if safe_eval(args.expression, x))
else:
result = (x for x in stdin if eval(args.expression))
elif args.list_of_stdin:
l = list(stdin)
result = eval(args.expression)
else:
result = eval(args.expression)
def format(output):
if output is None:
return None
elif args.json_output:
return json.dumps(output)
elif args.output_delimiter:
return args.output_delimiter.join(output)
else:
return output
if isinstance(result, Iterable) and hasattr(result, '__iter__') and not isinstance(result, str):
for x in result:
formatted = format(x)
if formatted is not None:
try:
print(formatted)
except UnicodeEncodeError:
print(formatted.encode('utf-8'))
else:
formatted = format(result)
if formatted is not None:
try:
print(formatted)
except UnicodeEncodeError:
print(formatted.encode('utf-8'))
if args.post_cmd:
exec(args.post_cmd)
except Exception as ex:
import traceback
pyheader = 'pythonpy/__main__.py'
exprheader = 'File "<string>"'
foundexpr = False
lines = traceback.format_exception(*sys.exc_info())
for line in lines:
if pyheader in line:
continue
sys.stderr.write(line)
if not foundexpr and line.lstrip().startswith(exprheader) and not isinstance(ex, SyntaxError):
sys.stderr.write(' {}\n'.format(args.expression))
foundexpr = True
sys.exit(1)
def main():
pass