|
|
"vergil -run model.xml\n exit\n"
This actor uses java.lang.Runtime.exec() to invoke a subprocess named by the command parameter in a directory with an environment. Data from the input port (if any) is passed to the input of the subprocess. The subprocess is run until it exits and then contents of the output and error streams of the subprocess (if any) are passed to the output and error ports.
If the subprocess generates no data on the output or error stream, then the data on the corresponding port(s) will consist of the empty string.
A much more interesting actor could be written using a Kahn Process Network. This actor would generate output asynchronously as the process was executing.
Currently, there appears to be no way to get the subprocess to
exit by passing it input. For example, if the command is set
to the cat
command, and we pass in a Const with the
value \04
, then the cat subprocess does not interpret
this as the end of file marker and exit.
For information about Runtime.exec(), see:
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
and
http://mindprod.com/jgloss/exec.html
Author(s): Christopher Hylands Brooks, Contributor: Edward A. Lee
Version:$Id: Exec.java,v 1.61 2006/02/07 00:47:46 cxh Exp $
Pt.Proposed Rating:Yellow (cxh) 2/5/04
Pt.Accepted Rating:Yellow (cxh) 2/24/04
|
|
echo "Hello, world."
.
The command parameter is read only once during fire().
If you want to spawn another different command,
use life cycle management actors such RunCompositeActor.
directory
The directory in which to execute the command.
This parameter is read each time the subprocess is started
in fire(). Once the subprocess is running, this parameter is not
read again until fire() is called again.
The initial default value of this parameter $CWD, which
corresponds with the value of the Java virtual machine
user.dir property which is the user's current working
directory. Note that if we are running inside a menu launched
application, then ptolemy.actor.gui.jnlp.MenuApplication will
change user.dir to be the value of user.home, which is the
name of the user's home directory.
environment
The environment in which to execute the command.
This parameter is read each time the subprocess is started
in fire(). Once the subprocess is running, this parameter is not
read again until fire() is called again.
This parameter is an array of records that name an environment variable and the value for the value. The format is:
{{name = "NAME1", value = "value1"}...}Where
NAME1
is the name of the environment
variable, and value1
is the value.
For example {{name = "PTII", value = "c:/ptII"}}
would set the value of the PTII
to c:/ptII
.
If the initial value of the parameter is {{name="",
value = ""}}
, then the environment from the calling or parent
process is used in the new command.
Note that if this parameter sets any environment variable,
then under Windows the other environment variables in the calling
or parent process might not be passed to the subprocess. This
behaviour could be platform or JVM dependent. When in doubt,
try setting the command value to "env" to print out the
environment.