首页 > 系统相关 >虚幻5启动外部进程并获取所有输出的方法

虚幻5启动外部进程并获取所有输出的方法

时间:2023-11-13 14:44:16浏览次数:25  
标签:输出 FPlatformProcess const 外部 nullptr BinaryData PipeRead 虚幻 BinaryFileContent

 1 int LaunchExternalProcess(const FString& InExecutablePath, const FString& InCommandArgument)
 2 {
 3     const bool bLaunchDetached = false;
 4     const bool bLaunchHidden = true;
 5     const bool bLaunchReallyHidden = true;
 6 
 7     int ReturnCode = 0;
 8     void* PipeRead = nullptr;
 9     void* PipeWrite = nullptr;
10 
11     verify(FPlatformProcess::CreatePipe(PipeRead, PipeWrite));
12 
13     FProcHandle ProcessHandle = FPlatformProcess::CreateProc(
14         *InExecutablePath, 
15         *InCommandArgument, 
16         bLaunchDetached, 
17         bLaunchHidden, 
18         bLaunchReallyHidden, 
19         nullptr, 
20         0, 
21         nullptr, 
22         PipeWrite, 
23         nullptr, 
24         nullptr
25     );
26 
27     if (ProcessHandle.IsValid())
28     {
29         TArray<uint8> BinaryFileContent;
30         while (FPlatformProcess::IsProcRunning(ProcessHandle))
31         {
32             FPlatformProcess::Sleep(0.01);
33 
34             TArray<uint8> BinaryData;
35             FPlatformProcess::ReadPipeToArray(PipeRead, BinaryData);
36             if (BinaryData.Num() > 0)
37             {
38                 BinaryFileContent.Append(MoveTemp(BinaryData));
39             }
40         }
41 
42         TArray<uint8> BinaryData;
43         FPlatformProcess::ReadPipeToArray(PipeRead, BinaryData);
44         if (BinaryData.Num() > 0)
45         {
46             BinaryFileContent.Append(MoveTemp(BinaryData));
47         }
48 
49         FPlatformProcess::GetProcReturnCode(ProcessHandle, &ReturnCode);
50         
51         FPlatformProcess::CloseProc(ProcessHandle);
52 
53         BinaryFileContent.Add(0);
54 
55         if (ReturnCode == 0)
56         {
57             UE_LOG(LogTemp, Log, TEXT("%s"), ANSI_TO_TCHAR((char*)BinaryFileContent.GetData()));
58         }
59         else
60         {
61             UE_LOG(LogTemp, Error, TEXT("exit code: %d\n%s"), ReturnCode, ANSI_TO_TCHAR((char*)BinaryFileContent.GetData()));
62         }        
63 
64         FPlatformProcess::ClosePipe(PipeRead, PipeWrite);
65 
66         return ReturnCode;
67     }
68     else
69     {
70         UE_LOG(LogTemp, Error, TEXT("Failed to launch %s"), *InExecutablePath);
71 
72         FPlatformProcess::ClosePipe(PipeRead, PipeWrite);
73     }
74 
75     return -1;
76 }

       可以用于启动外部工具执行外部操作。

标签:输出,FPlatformProcess,const,外部,nullptr,BinaryData,PipeRead,虚幻,BinaryFileContent
From: https://www.cnblogs.com/bodong/p/17829044.html

相关文章

  • BOSHIDA DC电源模块的电阻或电位器对输出电压的调节
    BOSHIDADC电源模块的电阻或电位器对输出电压的调节DC电源模块是电子设备中广泛应用的一种电源模块,它能够将交流电转换为稳定的直流电,并为其他电路或设备提供所需的电源。在一些场合中,需要对DC电源模块的输出电压进行调节,这是通过电阻或电位器来实现的。 DC电源模块中的电阻......
  • DC电源模块的电阻或电位器对输出电压的调节
    BOSHIDADC电源模块的电阻或电位器对输出电压的调节DC电源模块是电子设备中广泛应用的一种电源模块,它能够将交流电转换为稳定的直流电,并为其他电路或设备提供所需的电源。在一些场合中,需要对DC电源模块的输出电压进行调节,这是通过电阻或电位器来实现的。DC电源模块中的电阻或电位......
  • 浮点类型(double与float及其它们的输入输出)
    <1>浮点类型(1)两种类型double字长64位(8个字节),有效数字15,范围大概为2.2*10^-308~1.79*10^308,0,nan;float字长32位(4个字节),有效数字7,范围大概为1.2*10^-38~3.4*10^38,0,nan;————注明-nan:不是一个有效数字由两种浮点类型的范围建立数轴可知:在靠近0但不包括0的一小片区......
  • C++ 的cout格式化输出
    在某些实际场景中,我们经常需要按照一定的格式输出数据,比如输出浮点数时保留2位小数,再比如以十六进制的形式输出整数,等等。对于学过C语言的读者应该知道,当使用printf()函数输出数据时,可以通过设定一些合理的格式控制符,来达到以指定格式输出数据的目的。例如%.2f表示输出浮点......
  • 用循环嵌套输出菱形
    row=eval(input('请输入菱形的行数:'))#定义输入行数while的第一步:初始化变量whilerow%2==0:#当为奇数是继续执行,偶数时错误,重新输入while的第二步:条件判断print('请重新输入菱形的行数')#while的第三步:语句块row=eval(in......
  • 存在继承关系时的输出顺序
    packagecom.zhang;publicclassBextendsA{//子类的静态代码块static{System.out.println("子类的静态代码块执行了");}{System.out.println("子类的代码块执行了");}//子类的构造函数publicB(){super();......
  • python 执行脚本,并将输出打印到文件
    转载请注明出处:在使用python直接执行脚本时,执行的相关输出会打印到当前的控制台,如果想输出到指定的文件,可以采用以下几种方式:1.在启动时,使用>操作符,该操作符会将输出写入到指定文件,并覆盖原来文件内容如创建一个python脚本,内容如下:print("Thisisatest......
  • 输出瑞年,if语句后面加“;”导致语句失效
    输出1000-2000年之间的瑞年判断条件:(1)能被4整除但不能被100整除;(2)能被400整除#include<stdio.h>intmain(){ inti; for(i=1000;i<=2000;i++) { if(i%4==0&&i%100!=0) { printf("%d",i); } if(i%400==0)//开始这里加了";",结果输出了所有i值,if语句后加分号,只......
  • 如下代码输出的结果是什么:
    如下代码输出的结果是什么console.log(1+"2"+"2");console.log(1++"2"+"2");console.log("A"-"B"+"2");console.log("A"-"B"+2);12232NaN2NaNconsole.log(1+"2"+......
  • 1.两个数的最大公约数;2.输出某个范围的素数
    给定两个数,求其最大公约数#include<stdio.h>intmain(){ intm=24,n=18,r=0; while(m%n)//辗转相除法,改成"while(r=m%n)",下面的"r=m%n"可以省略 { r=m%n; m=n; n=r; } printf("%d\n",n); return0; }输出100-200内的素数#include<stdio.h>......