【发布时间】:2021-02-13 03:09:46
【问题描述】:
我一直在尝试为我的统一 VR 游戏编写一个快速脚本,以便在运行时从 Azure Kinect 相机开始录制,并在应用程序关闭时关闭此脚本/录制。要运行他们的演示录制应用程序,您可以在命令提示符下运行k4arecorder.exe output.mkv,然后按Ctrl-C 关闭摄像头,这样程序就可以正确保存文件(参见Azure Kinect SDK)。
我已经能够成功打开脚本并使用以下代码从相机开始录制,但我无法在弹出命令提示符中输入Ctrl-C(或任何文本)以停止相机从运行。而且我不能使用Process.StandardInput.Close(),因为我正在使用useShellExecute=True 运行它
.exe 在Ctrl-C 输入后保存摄像头记录,所以我确实需要在完全停止程序之前以某种方式关闭标准输入。
ProcessStartInfo startInfo;
Process process;
void Start()
{
startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Program Files\Azure Kinect SDK v1.4.1\tools\k4arecorder.exe";
startInfo.Arguments = System.IO.Directory.GetCurrentDirectory() + "\\output_testing.mkv";
process = new Process {StartInfo = startInfo};
process.Start();
}
我也尝试了另一种方法,重定向 StandardInput,但是在弹出命令提示符下我根本看不到任何文本,并且我尝试关闭 stdin 并将任何内容打印到命令提示符也没有奏效.例如,我从未在命令提示符中看到任何运行:
ProcessStartInfo startInfo;
Process process;
void Start()
{
startInfo = new ProcessStartInfo();
startInfo.FileName = @"C:\Program Files\Azure Kinect SDK v1.4.1\tools\k4arecorder.exe";
startInfo.Arguments = System.IO.Directory.GetCurrentDirectory() + "\\output_testing.mkv";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardInput = true;
startInfo.CreateNoWindow = false;
process = new Process {StartInfo = startInfo};
process.Start();
process.StandardInput.WriteLine("testing");
string output = process.StandardOutput.ReadToEnd();
UnityEngine.Debug.Log(output);
}
void OnApplicationQuit()
{
// this will just perpetually wait until I close the window cause cntrl-c not going thru
process.StandardInput.Close();
process.WaitForExit();
process.Close();
}
非常感谢任何提示!我觉得这两种方法都必须有办法解决,但我做不到。这是 Unity 2019.4.1f1 和 Azure Kinect SDK v1.4.1(虽然我不认为这是一个错误)。
【问题讨论】:
-
如果你想这样做:
process.StandardOutput.ReadToEnd(),那么你需要这样做:RedirectStandardOutput = true -
公平,谢谢您的回复。我已经编辑了该代码块以反映
RedirectStandardOutput = true,但命令提示符上仍然没有显示任何内容,我的统一控制台中也没有任何“测试”打印。
标签: c# unity3d process command-prompt azurekinect