using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WWPipeLine.Commons { public class PythonHelp { public static string PythonPath { get { if (System.IO.File.Exists(Paths.ApplicationPy)) { return Paths.ApplicationPy; } else { return "python.exe"; } } } /// /// Python执行脚本 /// /// /// /// /// public static EnumHelper.EPyStatus RunPythonScripts(EnumHelper.EBusinessType type, object model) { var status = EnumHelper.EPyStatus.Normal; if (model == null) return EnumHelper.EPyStatus.ArgsError; Process p = new Process();//开启一个新进程 try { string filepath = Paths.ApplicationPythonScripts + "InitServer.py"; p.StartInfo.FileName = string.Format("\"{0}\" ", PythonPath.Replace("\\", "/")); string sArguments = string.Format(" \"{0}\" \"{1}\" {2} ", filepath, Newtonsoft.Json.JsonConvert.SerializeObject(model).Replace("\"", "\\\""), ((int)type).ToString()); p.StartInfo.Arguments = sArguments; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.Start(); Commons.Cache.CurrentThreadID = p.Id; p.WaitForExit(); status = (EnumHelper.EPyStatus)p.ExitCode; } catch (Exception ex) { string msg = string.Empty; switch (ex.GetType().Name) { case "Win32Exception": msg = "python环境异常"; status = EnumHelper.EPyStatus.EnvError; break; case "NullReferenceException": msg = "python参数传递异常"; LogHelper.Error("python参数传递异常," + ex); status = EnumHelper.EPyStatus.ArgsError; break; default: msg = "python执行异常"; status = EnumHelper.EPyStatus.RunError; break; } LogHelper.Error(msg + "," + ex); } finally { p.Dispose(); } Commons.Cache.CurrentThreadID = 0; return status; } } }