首页 > 解决方案 > 如何在同一个线程中运行 iostream 系统命令?

问题描述

我正在尝试使用来自 Unreal Engine C++ 的 std::system 执行命令

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

该命令本身按预期工作,但是,我需要它在当前线程上执行,或者在继续之前检查它是否已完成,因为下一个操作取决于此命令的完成

有没有办法做到这一点?或者我应该使用另一个命令?

谢谢,伊甸园

标签: c++multithreadingshellsystemstd

解决方案


在您执行的命令完成运行之前, std::system函数不会返回。

同样在 Windows(您似乎正在运行)上,然后system将调用命令解释器 ( cmd) 来执行命令,这意味着您要执行的命令必须在命令解释器中PATH(或者是命令解释器的内部命令) .

如果python在 中PATH,那么您可以python直接运行命令,而无需使用startor cmd(尤其是从那时起您将有两个正在运行的实例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\"");

推荐阅读