Skip to content

Commit

Permalink
Add readline support (experimental)
Browse files Browse the repository at this point in the history
  • Loading branch information
vxgmichel committed Nov 2, 2017
1 parent 00a4507 commit c4958e7
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions aioconsole/apython.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import os
import sys
import runpy
import signal
import argparse
import subprocess

from . import events
from . import server
Expand All @@ -18,6 +20,8 @@ def parse_args(args):
help='serve a console on the given interface instead')
parser.add_argument('--module', '-m', dest='module', action='store_true',
help='run a python module')
parser.add_argument('--no-readline', dest='readline',
action='store_false', help='Force readline disabling')
parser.add_argument('filename', metavar='FILE', nargs='?',
help='python file or module to run')
parser.add_argument('args', metavar='ARGS', nargs=argparse.REMAINDER,
Expand All @@ -35,6 +39,17 @@ def run_apython(args=None):
args = sys.argv[1:]
namespace = parse_args(args)

try:
import readline
import rlcompleter
except ImportError:
readline, rlcompleter = None, None

if readline and namespace.readline and not namespace.serve:
if rlcompleter:
readline.parse_and_bind("tab: complete")
return run_apython_in_subprocess(args)

try:
sys._argv = sys.argv
sys._path = sys.path
Expand All @@ -57,3 +72,28 @@ def run_apython(args=None):
finally:
sys.argv = sys._argv
sys.path = sys._path


def run_apython_in_subprocess(args=None):
if args is None:
args = sys.argv[1:]
proc_args = [sys.executable, '-m', 'aioconsole', '--no-readline']
process = subprocess.Popen(
proc_args + args,
bufsize=0,
stdin=subprocess.PIPE)
while True:
try:
raw = input() + os.linesep
except KeyboardInterrupt:
process.send_signal(signal.SIGINT)
except EOFError:
process.stdin.close()
process.wait()
return
else:
process.stdin.write(raw.encode())


if __name__ == '__main__':
run_apython()

0 comments on commit c4958e7

Please sign in to comment.