В C ++, как мне запустить двоичный файл (который является пользовательской оболочкой) и передать ему команду? - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу открыть свою пользовательскую оболочку, дождаться передачи команды (это будет сделано в файле 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('> ')
...