Writing to function arguments during execution

John O'Hagan research at johnohagan.com
Tue Oct 13 22:29:41 EDT 2009


On Mon, 12 Oct 2009, Rhodri James wrote:
> On Sun, 11 Oct 2009 14:18:25 +0100, John O'Hagan <research at johnohagan.com>
> 
> wrote:
> > Now I can change the output of the "work" function while it's running via
> > raw_input(). However it's very crude, not least because the terminal
> > echo of
> > the new options is interspersed with the output of the program.
> >
> > In future I hope to be able to have several instances of the "work"
> > function
> > running as threads simultaneously, and to separately control the
> > arguments to
> > each.
> >
> > I think the general problem is how to send output from a thread to a
> > different
> > place from that of its parent thread, but I'm not sure.
> >
> > Is there a standard way to do this kind of thing? In particular, I'm
> > after a
> > solution whereby I can enter new arguments in one terminal window and
> > observe
> > the program's output in another.
> 
> The standard way (if you don't want to write a GUI for the whole thing)
> is to have separate programs communicating with sockets.  Start your
> music program in one terminal and the control program in the other,
> and have a thread listening to the socket rather than using raw_input().

Thanks, sockets are the way to go for this and surprisingly easy to use once 
you get your head around them. I tried Rhodri's suggested approach but for now 
I used the original terminal for both starting the program and entering new 
options (still via raw_input) and a new terminal listening on a socket 
connection to display the results. 

A secondary question: right now I'm starting the "listening" terminal by 
executing a script ('display.py') as a subprocess:

port = 50007
here = os.path.abspath('')
terminal = os.environ['TERM']
subprocess.Popen([terminal, '-e', here + '/display.py', str(port)])

but to me it feels kind of clunky to have a separate script just for this; is 
there a nicer way to launch another terminal, say by passing a locally defined 
function to it?

Regards,

John








More information about the Python-list mailing list