如何将进程输出重定向到 System.String

发布于 2024-09-25 09:11:27 字数 546 浏览 3 评论 0原文

我正在从 .NET 应用程序调用 Java 进程,并且需要重定向控制台输出 到 System.String 进行一些稍后的解析。请指教。我希望有简短的代码示例。

public bool RunJava(string fileName)
{
    try
    {
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.CreateNoWindow = true;
        psi.UseShellExecute = false;
        psi.EnvironmentVariables.Add("VARIABLE1", "1");
        psi.FileName = "JAVA.exe";
        psi.Arguments = "-Xmx256m jar.name";

        Process.Start(psi);
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

I am calling Java process from .NET application and I need to redirect console output
to System.String to do some later parsing. Please advice. I would appreciate short code example.

public bool RunJava(string fileName)
{
    try
    {
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.CreateNoWindow = true;
        psi.UseShellExecute = false;
        psi.EnvironmentVariables.Add("VARIABLE1", "1");
        psi.FileName = "JAVA.exe";
        psi.Arguments = "-Xmx256m jar.name";

        Process.Start(psi);
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

メ斷腸人バ 2024-10-02 09:11:27

更好的方法是创建一个 Process 实例并使用如下所示的流捕获输出:

Process cmd = new Process();
cmd.StartInfo.FileName = "JAVA.exe";
cmd.StartInfo.Arguments = "-Xmx256m jar.name";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.EnvironmentVariables.Add("VARIABLE1", "1");
cmd.Start();

StreamReader sr = cmd.StandardOutput;
string output = sr.ReadToEnd();
cmd.WaitForExit();

A better way will be to create a Process instance and capture the output using a stream like this:

Process cmd = new Process();
cmd.StartInfo.FileName = "JAVA.exe";
cmd.StartInfo.Arguments = "-Xmx256m jar.name";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.EnvironmentVariables.Add("VARIABLE1", "1");
cmd.Start();

StreamReader sr = cmd.StandardOutput;
string output = sr.ReadToEnd();
cmd.WaitForExit();
提笔落墨 2024-10-02 09:11:27

您需要将 RedirectStandardOutput 设置为 true,并且那么获取结果的最简单方法是使用事件驱动机制:

Process p = Process.Start(psi);
p.BeginOutputReadLine(LineHandler);
p.EnableRaisingEvents = true;

其中 LineHandler 是收集每行输出的适当方法,例如收集到 StringWriter 中。

You need to set RedirectStandardOutput to true, and then the easiest way of getting the results is to use the event-driven mechanism:

Process p = Process.Start(psi);
p.BeginOutputReadLine(LineHandler);
p.EnableRaisingEvents = true;

where LineHandler is an appropriate method to collect each line of output, e.g. into a StringWriter.

爱已欠费 2024-10-02 09:11:27

设置
ProcessStartInfo.RedirectStandardOutput

.RedirectStandardError
然后,您可以读取从 Process.Start 返回的 Process 对象上的 StandardOutputStandardError 流。

MSDN 为您提供了一个很好且简单的示例。

Set
ProcessStartInfo.RedirectStandardOutput
and
.RedirectStandardError.
Then you can read the StandardOutput and StandardError-streams on the Process-object that is returned from Process.Start.

MSDN have a nice and simple sample for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文