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;
}
}
}