У нас есть программа на C ++, иногда эта программа должна выполнять пользовательский скрипт batch / shell / ant. Мы не можем контролировать работу этого скрипта. Есть ли способ получить код возврата из программы на C ++?
Что-то вроде:
exec скрипт.sh> status.tmp?
Нам нужно поддерживать как Windows, так и Linux.
Есть идеи?
в Linux просто используйте
int ret=system("myshellscrtipt.sh");
поскольку возвращаемое значение скрипта является возвращаемым значением системной функции.
В Windows я бы не знал, есть ли подобная функция.
Если вы использовали инструментарий Qt, вы могли бы сделать что-то вроде этого
QProcess process;
process.start( "yourShellCommand", QStringList( args );
и это было бы действительно кроссплатформенным ..
Еще один простой способ — получить возврат с помощью 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
Надеюсь это поможет.
В bash код состояния хранится в специальной переменной:
C:/myprogram.exe
echo $?