C#正在处理Linux命令输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#正在处理Linux命令输出相关的知识,希望对你有一定的参考价值。

我在使用Process类来管理Linux系统上的命令时遇到问题。

我想执行以下命令:rpm2cpio repo.rpm | cpio -divm

我试过了

process.StartInfo.FileName = "rpm2cpio;
rocess.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.Arguments = "repo.rpm | cpio - idmv";

但程序挂起了。

同样,我尝试将rpm2cpio的输出保存为字符串或输出文件,然后将其作为cpio命令的参数传递,但它也会挂起。

process.StartInfo.FileName = "cpio";
rocess.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.Arguments = "-idvm < output.txt";
// or
process.StartInfo.Arguments = "-idvm < " + rp2cpio_output;

我有什么方法可以让这个工作?我看到this帖子有一个解决方案,但它在Window的系统上。在Linux上如何做同样的事情?

答案

设置process.StartInfo.RedirectStandardOutput=true将导致程序将标准输出重定向到流process.StartInfo.StandardOutput。发生这种情况时,程序将挂起,直到您从标准输出读取。

为了获得我认为你正在寻找的行为,你只需要设置RedirectStandardOutput=false。这样,命令中的管道和重定向将按预期工作。

以上是关于C#正在处理Linux命令输出的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段02

Linux GCC常用命令总结

Linux的终端怎么运行C语言

如何使用 C 捕获另一个进程的输出?

将 top 的结果输出到文件中

Linux文件管理 tail