Mercurial > pyshada
changeset 2:369dd74706b3
Host a pyshell server for run()
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 28 Mar 2011 22:56:55 +0800 |
parents | 79bbce42690e |
children | f81d17014d31 |
files | pysh.py |
diffstat | 1 files changed, 33 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/pysh.py Mon Mar 28 22:36:29 2011 +0800 +++ b/pysh.py Mon Mar 28 22:56:55 2011 +0800 @@ -1,15 +1,45 @@ import sys import os +import comm def run(cmd): + def terminate_shell(args, env, session): + yield + while True: + data = session.recv() + if data == None: + break + yield + pass + session.exit(0) + server.close() + pass + prev_frame = sys._getframe().f_back prev_locals = prev_frame.f_locals prev_globals = prev_frame.f_globals - env = ';'.join(['%s="%s"' % (k, v) - for k, v in prev_locals.items() + ns = dict(prev_locals) + ns['py'] = 'python -m shell_agent' + ns['terminate_shell'] = terminate_shell + + server = comm.server(ns) + server.listen() + + server_addr = server.get_addr() + ns['PYSHELL_SERVER'] = server_addr + + env = ';'.join(['export %s="%s"' % (k, v) + for k, v in ns.items() if isinstance(v, (str, int, float))]) - os.system(env + ';' + cmd) + env = env + ';py=\"python -m shell_agent\"' + + pid = os.fork() + if pid == 0: + os.system(env + ';' + cmd + '; $py terminate_shell') + pass + + server.handle() pass def runv(cmd):