java - 如何获取以 C# 开头的 Java 程序的实时输入/输出
问题描述
我有一个需要执行 Java 程序的 C# 程序,但是,在执行 Java 应用程序时,没有显示输出。我还需要这个输出是实时的,以及输入。
拿这个示例代码:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Executing \"echo test\":");
EchoRedirectDemo();
Console.WriteLine("Executing \"java -version\":");
JavaRedirectDemo();
}
static void JavaRedirectDemo()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo("java")
{
Arguments = "-version",
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true
};
Process process = Process.Start(processStartInfo);
process.WaitForExit();
Console.WriteLine(process.StandardOutput.ReadToEnd());
}
static void EchoRedirectDemo()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo("echo")
{
Arguments = "test",
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true
};
Process process = Process.Start(processStartInfo);
process.WaitForExit();
Console.WriteLine(process.StandardOutput.ReadToEnd());
}
}
它会运行echo test
得很好并重定向 in/out/err,但命令上不会有 in/out/err java -v
,如下所示:
Executing "echo test":
test
Executing "java -version":
关于如何解决这个问题的任何想法?
解决方案
CliWrap可以为您简化这一过程。
using System.Text;
using System;
using CliWrap;
using System.Threading.Tasks;
namespace proj
{
public class Program
{
public static async Task Main(string[] args)
{
var stdOutBuffer = new StringBuilder();
var stdErrBuffer = new StringBuilder();
var result = await Cli.Wrap("java")
.WithArguments("-version")
.WithWorkingDirectory("/")
.WithStandardOutputPipe(PipeTarget.ToStringBuilder(stdOutBuffer))
.WithStandardErrorPipe(PipeTarget.ToStringBuilder(stdErrBuffer))
.ExecuteAsync();
var stdOut = stdOutBuffer.ToString();
var stdErr = stdErrBuffer.ToString();
Console.WriteLine(stdOut);
Console.WriteLine(stdErr);
}
}
}
输出
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
推荐阅读
- node.js - 快速解析没有内容类型标头的 JSON
- java - 在 Rest Assured 中,getString() 将 4 位后的十进制值四舍五入
- node.js - 如何优化socket io性能?
- rust - 为什么我不能从标准输入读取行、删除空格并将它们推入向量中?`line` 寿命不够长
- apache-spark - 如何安装离线 Spark NLP 包
- c# - 在 C# 中杀死一个任务
- python - 如何在 Pandas 中仅水平聚合一些列
- python-3.x - opencv python3中imshow中的分段错误
- java - 在 java spark 中构建 AvroParquetWriter 时抛出 NoSuchMethod 异常
- javascript - 在 react js 中启用按钮后如何聚焦?