返回「计算机、信息技术与工程」

C#调用Shell命令

C 调用Shell命令

更多
Markdown 结构化数据
本文目录 2 个章节

C#调用Shell命令

创建时间:2020/10/23 12:10

使用C#在Windows系统上调用命令行,在MacOS上调用bash,笔者在实现时遇到了很多坑,记录下来。 以下代码亲测直接可用。在某些版本中,使用某个方法可能会出问题,选一个使用即可。

类Unix系统上调用bash

通过StartInfo.Arguments参数,只执行一行命令。

public class UsingEnum<T> where T : System.Enum { }
public class UsingDelegate<T> where T : System.Delegate { }
public class Multicaster<T> where T : System.MulticastDelegate { }

通过重定向标准输入输出流,一行一行执行命令

public class UsingEnum<T> where T : System.Enum { }
public class UsingDelegate<T> where T : System.Delegate { }
public class Multicaster<T> where T : System.MulticastDelegate { }

标准输入输出的方式也可以写一行,在行末尾加exit 命令,退出。 如果不执行exit命令,调用StandardOutput.ReadToEnd,会由于无法读到终止符而阻塞进程。

public class UsingEnum<T> where T : System.Enum { }
public class UsingDelegate<T> where T : System.Delegate { }
public class Multicaster<T> where T : System.MulticastDelegate { }

windows系统调用CMD

理论上与UNIX-like系统调用shell命令方式相同 以下为一行命令执行完的方法。由于在CMD中ReadToEnd会读出多余信息,这里提供一个CMDOutputFilter函数过滤多余的信息。

public class UsingEnum<T> where T : System.Enum { }
public class UsingDelegate<T> where T : System.Delegate { }
public class Multicaster<T> where T : System.MulticastDelegate { }

以luacheck工具为例,测试以上函数

class MyClass<T, U>
    where T : class
    where U : struct
{ }