我确实需要运行多个(同时)并与它们交互。有没有办法做到这一点?一些搜索使用了 exp_background 但当我尝试它时没有找到该命令。
关于spawn有几个问题,但没有一个解决我的问题。
有些是
在 Expect 脚本中处理多个生成的进程 - 这很有用,但解决方案是按顺序与它们交互(一次一个)。我需要同时与其中两个互动。
这是一个使用我的 sexpect 的示例 shell 脚本。在脚本中,它让 Bash 和 Python 一起计算
sum(1..10)
。
bashexp() { sexpect -s /tmp/sexpect-bash-$$.sock "$@"; }
pythexp() { sexpect -s /tmp/sexpect-pyth-$$.sock "$@"; }
ps1bash='bash-[0-9.]+[$#] $'
ps1pyth='>>> $'
bashexp spawn bash --norc
pythexp spawn python3
bashexp expect -re "$ps1bash"; echo
pythexp expect -re "$ps1pyth"; echo
sum=0
for ((i = 1; i <= 10; ++i)); do
if ((i % 2)); then # bash to add odd numbers
bashexp expect -lookback 1
bashexp send -enter "echo sum=\$(($sum + $i))"
bashexp expect -re 'sum=([0-9]+)'
sum=$( bashexp expect_out -i 1 )
bashexp expect -re "$ps1bash"; echo
else # python to add even numbers
pythexp expect -lookback 1
pythexp send -enter "print('sum=%d' % ($sum + $i))"
pythexp expect -re 'sum=([0-9]+)'
sum=$( pythexp out -i 1 )
pythexp expect -re "$ps1pyth"; echo
fi
done
bashexp expect -lookback 1
bashexp send -enter 'exit # Bash exiting ...'
bashexp wait
pythexp expect -lookback 1
pythexp send -enter 'exit() # Python exiting ...'
pythexp wait
echo "---- Final sum: $sum ----"
bash-5.2$
Python 3.11.5 [Clang 14.0.3] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
bash-5.2$ echo sum=$((0 + 1))
sum=1
bash-5.2$
>>> print('sum=%d' % (1 + 2))
sum=3
>>>
bash-5.2$ echo sum=$((3 + 3))
sum=6
bash-5.2$
>>> print('sum=%d' % (6 + 4))
sum=10
>>>
bash-5.2$ echo sum=$((10 + 5))
sum=15
bash-5.2$
>>> print('sum=%d' % (15 + 6))
sum=21
>>>
bash-5.2$ echo sum=$((21 + 7))
sum=28
bash-5.2$
>>> print('sum=%d' % (28 + 8))
sum=36
>>>
bash-5.2$ echo sum=$((36 + 9))
sum=45
bash-5.2$
>>> print('sum=%d' % (45 + 10))
sum=55
>>>
bash-5.2$ exit # Bash exiting ...
exit
>>> exit() # Python exiting ...
---- Final sum: 55 ----