Есть несколько подходов, которые вы можете использовать, самый гибкий здесь также самый сложный, поэтому вы должны решить, нужно ли вам это делать.
Если вам нужно только показать результатсценария, вы можете просто направить вывод в файл или в именованный канал.Затем вы можете захватить этот вывод, читая / отслеживая файл.Это самое простое, если на самом деле сценарию не нужно взаимодействовать с пользователем.
Если вам действительно нужно только запустить сценарий, работающий в фоновом режиме, и вам нужно смоделировать взаимодействие с пользователем, но вына самом деле не нужно принимать фактический пользовательский ввод, вы можете использовать подход expect
(используя библиотеку pexpect ).
Если вам действительно нужно разрешить реальному пользователю взаимодействовать сПрограмма, то у вас есть два подхода.Во-первых, вы можете встроить виджет VTE в свое приложение, это наиболее бесшовная интеграция, поскольку она сделает терминал совершенно незаметным для вашего приложения, однако он также самый тяжелый.
Другой подход состоит в том, чтобы запустить gnome-терминал, как вы сделали здесь, это обязательно порождает новое окно.
Если вам нужно оба сценария взаимодействовать друг с другом, а также разрешать ввод данных пользователем, вы можете сделать это, порождая ваш сценарий в сеансе tmux.С помощью команды tmux send-keys
автоматизируйте интерактивную часть луны, а затем создайте эмулятор терминала, чтобы пользователи могли взаимодействовать с tmux attach
.Если вам нужно переключаться между автоматизированной частью и интерактивной частью, вы можете комбинировать этот подход с ожидаемым.