Как запустить системную команду iostream в том же потоке? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь выполнить команду, используя std :: system из Unreal Engine C ++

FString command = FString("start /B cmd /k python \"D:/app.py\"");
std::string comm(TCHAR_TO_UTF8(*command));
std::system(comm.c_str());

Сама команда работает, как и ожидалось, однако мне нужно, чтобы она выполнялась в текущем потоке, или В качестве альтернативы проверьте, завершено ли это, прежде чем продолжить, потому что следующие операции зависят от выполнения этой команды

Есть ли способ сделать это? или, может быть, я должен использовать другую команду?

Спасибо, Eden

1 Ответ

1 голос
/ 26 марта 2020

Функция std :: system не вернется, пока не завершится выполнение команды, которую вы выполняете.

Также на Windows (который, кажется, выполняется), затем system вызовет интерпретатор команд (cmd) для выполнения команды, что означает, что команда, которую вы хотите выполнить, должна быть в интерпретаторах команд PATH (или быть внутренней командой интерпретатора команд) .

Если python находится в PATH, вы можете запустить команду python напрямую, без использования start или cmd (тем более, что тогда у вас будет two *). 1018 * экземпляров cmd выполняется), а функция system блокируется и не возвращается, пока не завершится выполнение команды python:

FString command = FString("python \"D:/VRoscopy_repo/VRoscopy/conversion/invesalius3-master/app.py\" --no-gui -i \"D:\VRoscopy_repo\DICOM\Human\MedDream\Body\" -t 200,3033 -e \"D:\VRoscopy_repo\DICOM\Human\MedDream\Body/VRoscopy27777BED4B650CE6AFE884B365C56BCC.stl\"");
...