Mercurial > pyshada
changeset 21:86d71eb1c66c
Helper for interactive shell
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Thu, 31 Mar 2011 20:46:08 +0800 |
parents | 82acaafa57f9 |
children | 08f19afde7bd |
files | shada/shhelper.py |
diffstat | 1 files changed, 54 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/shada/shhelper.py Thu Mar 31 20:46:08 2011 +0800 @@ -0,0 +1,54 @@ +from shada import comm + +def def_cmd(args, env, session): + pass + +def cmds(args, env, session): + all_cmds = [k for k, v in ns.items() if callable(v)] + txt = '\n'.join(all_cmds) + '\n' + session.send(txt) + pass + +def values(args, env, session): + all_values = ['%s=%s' % (k, repr(v)) + for k, v in ns.items() if not callable(v)] + txt = '\n'.join(all_values) + '\n' + session.send(txt) + pass + +def set(args, env, session): + if len(args) == 0: + return + + if len(args) == 1: + varname = args[0] + del ns[varname] + return + + varname = args[0] + value = ' '.join(args[1:]) + ns[varname] = value + pass + +if __name__ == '__main__': + import os + + ns = {'def': def_cmd, 'cmds': cmds, 'values': values, 'set': set} + server = comm.server(ns) + server.listen() + ns['server'] = server + + pid = os.fork() + if pid == 0: # child + import sys, os + sys.stdout.close() + sys.stdin.close() + os.close(0) + os.close(1) + os.setpgid(os.getpid(), os.getpid()) + server.handle() + else: + addr = server.get_addr() + print 'PYSHELL_SERVER="%s"; export PYSHELL_SERVER; py="python -m shada.shell_agent"; export py' % (addr) + pass + pass