Я хочу открыть свою пользовательскую оболочку, дождаться передачи команды (это будет сделано в файле c ++), выполнить команду, а затем закрыть оболочку.
Я знаю, что могу использоватьЧтобы запустить оболочку, я попытался добавить fprintf и команду после, чтобы отправить команду в оболочку, но похоже, что оболочка запускается и закрывается сразу после того, как команда не проходит.
Этоработает с python3, и я использовал pexpect
, чтобы заставить его работать. Я хочу сделать эту работу с C ++. Какие-либо предложения? Спасибо
РЕДАКТИРОВАТЬ: Извините, я новичок здесь. Я добавил код, чтобы объяснить, что я имею в виду. Поэтому, когда я запускаю пользовательскую оболочку, я хочу запустить свою команду после запуска оболочки, а затем закрыть ее, если это имеет смысл. Команда, которую я пытаюсь запустить в этой оболочке, создает новый каталог и генерирует несколько двоичных файлов, но этого не происходит, когда я запускаю следующий код. Он просто открывает оболочку и завершает работу.
#include <cstdlib>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
FILE *fp;
fp = popen("./bin/main/my_shell","w");
if (fp != NULL){
fprintf(fp,"my_command");
}
pclose(fp);
return 0;
}
Этот скрипт Python работает. Эта оболочка имеет приглашение «>» вместо «$».
from subprocess import Popen, PIPE, STDOUT, run
import pexpect
p = pexpect.spawn('./bin/main/my_shell')
p.expect('> ')
p.sendline('my_command')
p.expect('> ')