[chimera-dev] Direct standard output to Reply Log

Greg Couch gregc at cgl.ucsf.edu
Tue Dec 2 16:08:53 PST 2014


This is normal consequence of running a program and redirecting its 
output.  When the subprocess outputs to a terminal, the output is 
line-buffered, but if the output is not going to a terminal, then the 
output accumulates (8K bytes usually, but varies depending on your 
operating system) before being printed.  The solution is to alter the 
subprocess to turn off output buffering (or turn on line-buffering).  In 
C, the function to call is setbuf(stdout, NULL).  If the subprocess is 
written in Python, then give the -u argument to Python (or set the 
PYTHONUNBUFFERED environment variable).

     HTH,

     Greg

On 12/02/2014 02:23 PM, user wrote:
> Hi,
>
> I am new to write Chimera code. Right now I am trying to run another program as a subprocess within Chimera.
> While I was trying to redirect the standard output from the subprocess to “Reply Log”, the results could be shown only after the subprocess finished but not simultaneously. I was wandering how should I redirect the output to “Reply Log” while the subprocess program is running.
>
> Right now I have something like this:
>
> def show(sub):
> 	for line in sub.stdout:
> 		replyobj.info(line)
>
> subproc = SM.Popen(cmd, stdin=None, stdout = SM.PIPE, stderr=SM.PIPE)
> subprog = SM.monitor(‘prog’, subproc, title=‘run’, task=task, afterCB=show(subproc))
>
> If I run this block within the IDLE, then the result printed while it is running (seems still a bit delayed).
> Where should I change?
>
> Thank you in advance.
>
> Zhe
>
>
>
>
> _______________________________________________
> Chimera-dev mailing list
> Chimera-dev at cgl.ucsf.edu
> http://www.rbvi.ucsf.edu/mailman/listinfo/chimera-dev
>




More information about the Chimera-dev mailing list