public delegate void OnDataReceived(string data);
static void onreceive(string data)
{
if (data.Length > 0)
{
UnityEngine.Debug.Log(data);
}
}
OnDataReceived recive = new OnDataReceived(onreceive);
public void CreateCmd(string cmd)
{
Process CmdProcess = new Process();
CmdProcess.StartInfo.FileName = "cmd.exe";
CmdProcess.StartInfo.CreateNoWindow = true; // 不创建新窗口
CmdProcess.StartInfo.UseShellExecute = false; //不启用shell启动进程
CmdProcess.StartInfo.RedirectStandardInput = true; // 重定向输入
CmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向标准输出
CmdProcess.StartInfo.RedirectStandardError = true; // 重定向错误输出
CmdProcess.StartInfo.Arguments = "/c " + cmd;//“/C”表示执行完命令后马上退出
//CmdProcess.StartInfo.Arguments = cmd;
CmdProcess.Start();//执行
CmdProcess.OutputDataReceived += (sender, e) =>
{
recive?.Invoke(e.Data);
};
CmdProcess.ErrorDataReceived += (sender, e) =>
{
recive?.Invoke(e.Data);
};
CmdProcess.EnableRaisingEvents = true;
CmdProcess.BeginOutputReadLine();
CmdProcess.BeginErrorReadLine();
//UnityEngine.Debug.Log(CmdProcess.StandardOutput.ReadToEnd());
//CmdProcess.StandardOutput.ReadToEnd();//获取返回值
CmdProcess.WaitForExit();//等待程序执行完退出进程
CmdProcess.Close();//结束
}
注意一点,unity的命令行默认目录是项目根目录,并不是工具脚本所在目录。
可以在调用cmd指令的时候 调用dir(windows) 或者ls(linux||mac) 看一下返回的文件名都是哪些,看看当前目录是哪里。
调用python的话,直接官网安装一个嵌入式的免安装python,通过相对路径到python目录下面直接执行就好了。
这里python打印中文会乱码,我还没有研究,后面再看吧。
吐槽,查了好几个,都不加这两行,你们能打印的出来??我快吐了。。
CmdProcess.BeginOutputReadLine();
CmdProcess.BeginErrorReadLine();