c# - 在 C# MVC 中执行的 OCTAVE .m 文件
问题描述
我的应用程序在带有框架 4.5.2 的 C# MVC 中,并且想要运行外部文件(.m)并从中获取输出,它是用 Octave 编写的。
注意:输出结果是一个字符串,所以我必须在 C# html 页面中显示该输出。
算法是用八度编写的,并且在算法 excel 文件中可以读取数据,外部参数也通过 C# 传递。
我尝试了已经发布的东西,主要关注的是我的应用程序托管在天蓝色云中。所以,我不能在云中安装 octave。您能否建议我使用动态 excel 文件和参数直接运行外部文件(.m)的任何其他方式。我可以展示我的代码我做了什么。它在本地工作,但我无法在 Azure 云中安装 Octave。我将安装的文件夹放在服务器上的根路径,但它也不起作用。
public Octave(string pathToOctaveBinaries, bool createWindow)
{
StartOctave(pathToOctaveBinaries, createWindow);
}
private void StartOctave(string pathToOctaveBinaries, bool createWindow)
{
_ptob = pathToOctaveBinaries;
cw = createWindow;
this.OctaveEchoString = Guid.NewGuid().ToString();
OctaveProcess = new Process();
ProcessStartInfo pi = new ProcessStartInfo();
if (pathToOctaveBinaries[pathToOctaveBinaries.Length - 1] != '\\')
pathToOctaveBinaries = pathToOctaveBinaries + "\\";
pi.FileName = pathToOctaveBinaries + "octave-cli.exe";
pi.RedirectStandardInput = true;
pi.RedirectStandardOutput = true;
pi.RedirectStandardError = true;
pi.UseShellExecute = false;
pi.CreateNoWindow = !createWindow;
pi.Verb = "open";
//
pi.WorkingDirectory = ".";
OctaveProcess.StartInfo = pi;
OctaveProcess.Start();
OctaveProcess.OutputDataReceived += new DataReceivedEventHandler(OctaveProcess_OutputDataReceived);
OctaveProcess.BeginOutputReadLine();
OctaveEntryText = ExecuteCommand(null);
}
public string ExecuteCommand(string command, int timeout)
{
if (OctaveProcess.HasExited)
{
StartOctave(_ptob, cw);
if (OctaveRestarted != null) OctaveRestarted(this, EventArgs.Empty);
}
_exitError = false;
Thread tmp = new Thread(new ParameterizedThreadStart(WorkThread));
tmp.Start(command);
if (!tmp.Join(timeout))
{
tmp.Abort();
throw new Exception("Octave timeout");
}
if (_exitError)
{
throw new Exception(_errorMessage);
}
return SharedBuilder.ToString();
}
以上是 Octave 类文件。我动态传递 .exe 的路径以作为线程运行。
控制器代码:
Octave octave = new Octave(OctaveFilePath, false);
string fileData = result.Data.ToString();
fileData = fileData.Replace("#ExcelFilePath#", excelFilePath);
fileData = fileData.Replace("#ABCD#", historyData);
string rasp = octave.ExecuteCommand(fileData, 30000);
从这里我得到字符串并显示在 html 页面中。
解决方案
推荐阅读
- matlab - 有没有办法在不影响 uistack 排序的情况下更改 matlab 中的当前轴对象?
- google-authenticator - 如何将“Google Authenticator”代码设置为 4 位而不是 6 位?
- r - 错误:美学必须是长度1或与数据相同(n):填充
- .htaccess - htaccess,重定向除您的域之外的所有其他人
- pine-script - 在 Tradingview 平台上使用 Pine 中的 LABEL 功能获取数据时出现问题
- javascript - 从 JSON 映射数据不能很好地解析
- java - 应用程序设置页面打开两次Android
- java - “mousePressed/mouseClicked”因任何原因无法正常工作
- c# - Jenkins NuGet 恢复 - 响应代码 500
- python - 如何在训练前解决不平衡的数据?