本文目录 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
{ }