我有一个CLI,可以启动进程,尤其是交互式外壳,并等待它们,可以使用相同的CLI关闭它们。我需要使用bash创建一些端到端测试,但是我看不到如何在终端中模拟执行情况。输出应在“前景”中发送到流程。
假设执行my-cli start
启动一个python脚本,该脚本启动一个子进程(运行一个交互式shell)并等待它。
在测试脚本中,exec(my-cli start)
会将当前进程替换为运行python脚本的进程,而不是交互式外壳程序,因此之后我将无法与交互式外壳程序进行交互。
我考虑过使用管道,但是我认为可以使用终端进行模拟的东西会更好,有什么想法吗?
示例:
假设我的CLI(cli.py
)的代码是:
import subprocess
process = subprocess.Popen(['/bin/bash', '-i'], shell=False)
process.communicate()
我使用expect
不知道是否可以与交互式外壳(/bin/bash -i
)进行通信
#!/usr/bin/expect -f
spawn python3 cli.py
#expect eof
send -- "echo $$\r"
答案 0 :(得分:0)
如本杰明的评论中所述。我和许多其他人在这种情况下使用了expect
。只要您能说出将在终端中显示的文本,就可以使用以下网页作为创建期望脚本的指南。