From: John Stone (johns_at_ks.uiuc.edu)
Date: Mon Nov 05 2007 - 17:31:24 CST

Is your code flushing the output or otherwise reading it?
It's possible that the stdout channel is backing up and causing
VMD to go to sleep due to a blocking write call on stdout...
You could either redirect the stdout channel to /dev/null, or
else flush the output constantly.

You might find it easier to control VMD through a socket interface
where a Tcl script handles the command processing on the VMD side
for you so you don't have to worry about output being flushed etc:
  http://www.ks.uiuc.edu/Research/vmd/script_library/scripts/vmdcollab/

Cheers,
  John Stone
  vmd_at_ks.uiuc.edu

On Mon, Nov 05, 2007 at 05:55:50PM -0500, jiwu liu wrote:
>
> Hi,
>
> I wrote a simple interface to control vmd from a pipe. In python, it is:
> p = os.popen('/usr/local/lib/vmd/vmd_LINUX', 'w')
>
> and then I can write command string to vmd.
>
> But I found that command can not be sent immediately after another one, I
> have to insert a delay
> time.sleep(0.5)
> between two consecutive commands.
>
> For examples, I had coloring selection commands like:
>
> (1) set sel [atomselect 0 "name H"]
> (2) $sel set user 1.0
> (3) mol modcolor 0 0 User
>
> I had to wait for 0.5 secs between commands sent through pipe to vmd.
> Otherwise the command would not take any effect until next sending, namely,
> command (2) will be run when I send command (3), so will the command 3.
> Everything will be just postponed one step( And I do have "p.flush()" after
> each command).
>
> In vmd TCL scritpt , I don't see any "sleep" between two commands. Why
> does it take a 'wait' when I use pipe to write to vmd program? does it have
> to do with how vmd read stdin?
> Thanks for any help.
>
> jiwu

-- 
NIH Resource for Macromolecular Modeling and Bioinformatics
Beckman Institute for Advanced Science and Technology
University of Illinois, 405 N. Mathews Ave, Urbana, IL 61801
Email: johns_at_ks.uiuc.edu                 Phone: 217-244-3349
  WWW: http://www.ks.uiuc.edu/~johns/      Fax: 217-244-6078