Chapter 10. Handling Multiple Processes
In this chapter, I will describe how to build scripts that communicate with multiple processes. Using multiple processes, you can build scripts that do much more than simple automation. For instance, you can connect programs together or borrow the facilities of one to enhance those of another. You can also do it transparently so that seems like a single program to anyone running the script.
The spawn_id Variable
In the following script, two processes are spawned. The first is bc
, an arbitrary precision arithmetic interpreter. The second is a shell. By default, send
and expect
communicate with the most recently spawned process. In this case, the following expect
reads from the shell because it was spawned after bc
.
spawn bc spawn /bin/sh expect $prompt ;# communicate with /bin/sh
Why is this? When a spawn
command is executed, the variable spawn_id
is set to an identifier that refers to the process. The spawn_id
variable is examined each time send
and expect
are called. send
and expect
know how to access the process by using the value in spawn_id
.
If another process is spawned, spawn_id
is automatically set to an identifier referring to the new process. At this point, send
and expect
then communicate with the new process. In this example, "spawn bc
" stored an identifier into spawn_id
, but "spawn /bin/sh
" replaced that with a new identifier to itself. The following expect
command therefore communicates with the shell.
It is possible to communicate ...
Get Exploring Expect now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.