#!/usr/bin/env python3 # Cleverly run Mathematica with the benefit of readline, which # is something the usual commercial mathematica doesn't provide! # See # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/363500 import signal import subprocess import sys from sage.cpython.string import str_to_bytes def child_exited(*args): global child status = child.poll() if status is not None: sys.exit(status) signal.signal(signal.SIGCHLD, child_exited) child = subprocess.Popen('math', shell=True, stdin=subprocess.PIPE) pipe = child.stdin while True: try: line = input() pipe.write(str_to_bytes(line + '\n')) pipe.flush() except KeyboardInterrupt: pipe.close() except EOFError: break sys.stdout.write('\n')