У меня есть CLI, который может запускать процессы, особенно интерактивные оболочки, и ждет их, их можно закрыть с помощью того же CLI. Мне нужно создать некоторые сквозные тесты для него, используя bash, но я не вижу, как имитировать выполнение в терминале; вывод должен быть отправлен процессу на «переднем плане».
Предположим, что выполнение my-cli start
запускает скрипт Python, который запускает подпроцесс (запускает интерактивную оболочку) и ожидает его.
в сценарии тестирования 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"