private void PythonProcess_ErrorDataReceived(object sender, DataReceivedEventArgs e) { if (string.IsNullOrEmpty(e.Data)) { return; } string data = e.Data; if (e.Data.Contains("STDERR:")) { data = e.Data.Split(new char[] { ':' }, 2)[1]; } Console.WriteLine("stderr[" + State + "]:" + e.Data); switch (State) { case STATE_RUNNING: { OnStdErr?.Invoke(data); hasRunError = true; } break; case STATE_COMPILING: { OnStdErr?.Invoke(data); hasCompileError = true; } break; } }
/// <summary> /// if there is an error in this function, you didn't setup the VisibleInPython attribute with a backing field /// </summary> /// <param name="name"></param> /// <param name="value"></param> void UpdateProxyProperty(string name, string value) { Type proxyType = proxy.GetType(); PropertyInfo prop = proxyType.GetProperty(name); VisibleInPythonAttribute attr = (VisibleInPythonAttribute)prop.GetCustomAttribute(typeof(VisibleInPythonAttribute)); FieldInfo field = proxyType.GetField(attr.BackingField, BindingFlags.Instance | BindingFlags.NonPublic); try { object castedValue = Convert.ChangeType(value, field.FieldType); field.SetValue(proxy, castedValue); OnValueUpdatedOnProxy?.Invoke(name, proxy); } catch (Exception) { string err = "Python provided a bad value (" + value + ") for property " + name; OnStdErr?.Invoke(err); OnBadValue?.Invoke(err); } }