Использование возвращаемого значения Main () в качестве аргумента для сценария python - PullRequest
0 голосов
/ 16 июня 2020

Я хочу, чтобы мои процессы C ++ передавали свое возвращаемое значение для открытия сценария python.

cpp пример файла

int main()

{
   //do something
   //process is going to finish and is gonna return, for simplicity, 0
   //retval = 0, or whatever the return value is going to be 
   popen("mypython_script.py retval")
   return 0;
}

mypython_script.py

if __name__ == "__main__":
    cpp_retval = sys.argv[1]
    print(cpp_retval)

Я не знаю, возможно ли для файла C ++ отправить возвращаемое значение, как описано, но это всего лишь общее поведение, которого я хочу достичь.

У меня также есть контроль над родительским процессом каждого процесса C ++: это еще один сценарий python, который отвечает за открытие файлов C ++ и завершение их процесса, если это необходимо, поэтому, если у вас есть решение, которое включает использование родительского процесса для получить возвращаемое значение из «cpp пример файла», это более чем приветствуется

РЕДАКТИРОВАТЬ: Я забыл добавить, что я не могу попросить родительский процесс python дождаться, пока программа на C ++ что-то вернет. Я ни в коем случае не могу иметь никаких "ожиданий" в моей программе.

1 Ответ

2 голосов
/ 16 июня 2020

Вы можете захватить возвращаемое значение программы C ++ из родительского сценария python, если вы запустите программу C ++ с использованием cpp_retval = subprocess.call(...) или cpp_retval = subprocesss.run(...).returncode (https://docs.python.org/3/library/subprocess.html).

Затем вы можете передать это другому python скрипту. Итак, что-то вроде этого:

cpp_retval = subprocess.call(["my_cpp_program.exe"])
subprocess.call(["my_python_script.py", str(cpp_retval)])

Если вы хотите напрямую передать значение из программы C ++ в сценарий python, вы можете сделать это так:

#include <cstdlib> // std::system
#include <string>

int main()
{
  const int retval = do_stuff();
  std::system((std::string("my_python_script.py") + ' ' + std::to_string(retval)).c_str());

  return retval;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...