Skip to content Skip to sidebar Skip to footer

Trigger Tab Completion For Python Batch Process Built Around Readline

Background: I have a python program that imports and uses the readline module to build a homemade command line interface. I have a second python program (built around bottle, a we

Solution 1:

Solution #1 proved to be a workable approach. The key was to not connect the web socket directly to the CLI app. Apparently, readline was falling back into some simpler mode, which filtered out all TAB's, since it was not connected to a real PTY/TTY. (I may not be remembering this exactly right. Many cobwebs have formed.) Instead, a PTY/TTY pair needed to be opened and inserted in between the CLI app and web-sockets app, which tricked the CLI app into thinking it was connected to a real keyboard-based terminal, like so:

import pty
masterPTY, slaveTTY = pty.openpty()
appHandle = subprocess.Popen(
    ['/bin/python', 'myapp.py'],
    shell=False,
    stdin=slaveTTY,
    stdout=slaveTTY,
    stderr=slaveTTY,
    )
...
while True
    # readoutput from CLI app
    output = os.read(masterPTY, 1024)
    ...
    # writeoutput to CLI app
    while input_data:
        chars_written = os.write(masterPTY, input_data)
        input_data = input_data[chars_written:]
    ...
appHandle.terminate()
os.close(masterPTY)
os.close(slaveTTY)

HTH someone else. :)

See this answer to a related question for more background:

https://stackoverflow.com/a/14565848/538418

Post a Comment for "Trigger Tab Completion For Python Batch Process Built Around Readline"