期望中,我如何与多个生成的进程交互?

问题描述 投票:0回答:1

我确实需要运行多个(同时)并与它们交互。有没有办法做到这一点?一些搜索使用了 exp_background 但当我尝试它时没有找到该命令。

寻找解决方案。

关于spawn有几个问题,但没有一个解决我的问题。

有些是

expect
1个回答
0
投票

这是一个使用我的 sexpect 的示例 shell 脚本。在脚本中,它让 Bash 和 Python 一起计算

sum(1..10)

$ 猫 multi-spawn.sh

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 multi-spawn.sh

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 ----
© www.soinside.com 2019 - 2024. All rights reserved.