gpt4 book ai didi

C#/Mono - 从控制台应用程序读取输出

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:43 27 4
gpt4 key购买 nike

我目前正在编写一个程序,用作第二个控制台程序的接口(interface),因此它应该读取该程序的输出,处理它并根据需要发回命令。

当我在 Windows 机器上的 Visual Studio 中测试我的代码时,一切正常。但是当我在我的 Ubuntu 机器上用 Mono (xbuild) 编译它时,我的程序无法从控制台程序读取输出(而且我没有得到任何异常或任何东西)

我的相关代码如下。在看到其他人是如何做的之后,我还尝试使用 ProcessStartInfo 参数将控制台程序作为 /bin/bash -c '/path/to/console_program' 运行,但它给了我同样的沉默结果。

    private static ProcessStartInfo startInfo;
private static Process process;

private static Thread listenThread;
private delegate void Receive(string message);
private static event Receive OnReceive;

private static StreamWriter writer;
private static StreamReader reader;
private static StreamReader errorReader;

public static void Start(bool isWindows)
{
if(isWindows)
startInfo = new ProcessStartInfo("console_program.exe", "");
else
startInfo = new ProcessStartInfo("/path/to/console_program", "");

startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;

startInfo.RedirectStandardError = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;

process = new Process();
process.StartInfo = startInfo;
bool processStarted = process.Start();

Console.WriteLine("[LOG] Engine started: " + processStarted.ToString());

writer = process.StandardInput;
reader = process.StandardOutput;
errorReader = process.StandardError;

OnReceive += new Receive(Engine_OnReceive);

listenThread = new Thread(new ThreadStart(Listen));
listenThread.Start();
}

private static void Engine_OnReceive(string message)
{
Console.WriteLine(message);
}

private static void Listen()
{
while (process.Responding)
{
string message = reader.ReadLine();
if (message != null)
{
OnReceive(message);
}
}
}

看到其中有任何明显的错误我应该修复以使其在 Linux 端运行吗?

最佳答案

您不应使用 process.Responding。相反,使用 null 检查来检测流的结尾。这对我来说很有意义,即使我不知道 mono 总是为 Responding 属性返回 false(参见 mono source code ),因为终止(未响应)进程的输出可能仍然被缓冲。

关于C#/Mono - 从控制台应用程序读取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com