Как получить код возврата из скрипта batch / shell, запущенного из кода C ++

У нас есть программа на C ++, иногда эта программа должна выполнять пользовательский скрипт batch / shell / ant. Мы не можем контролировать работу этого скрипта. Есть ли способ получить код возврата из программы на C ++?

Что-то вроде:
exec скрипт.sh> status.tmp?

Нам нужно поддерживать как Windows, так и Linux.

Есть идеи?

2

Решение

в Linux просто используйте

int ret=system("myshellscrtipt.sh");

поскольку возвращаемое значение скрипта является возвращаемым значением системной функции.
В Windows я бы не знал, есть ли подобная функция.
Если вы использовали инструментарий Qt, вы могли бы сделать что-то вроде этого

QProcess process;

process.start( "yourShellCommand", QStringList( args );

и это было бы действительно кроссплатформенным ..

0

Другие решения

Еще один простой способ — получить возврат с помощью marco WEXITSTATUS. Практически так же, как вы получаете возвращаемые значения дочернего процесса с помощью вызова waitpid (в системах на основе Unix).

Вот пример программы. У меня есть одна программа на C / C ++ и один простой скрипт bash.

Пример сценария bash

#!/bin/bash
echo "I am in Script"exit 5;

Пример программы на C / C ++

int i, ret = system("./b.sh 2>&1 > /dev/null");
i=WEXITSTATUS(ret);
printf("My val= %d\n",i);

Выход

./a.out
My val= 5

Если вы хотите, чтобы более продвинутый подход имел несколько кодов возврата из скрипта, или вам нужен интерактивный сеанс, то, возможно, вам следует использовать POPEN

Надеюсь это поможет.

7

В bash код состояния хранится в специальной переменной:

C:/myprogram.exe
echo $?
0
По вопросам рекламы [email protected]