OCTAVE .m файл для выполнения в C # MVC - PullRequest
0 голосов
/ 19 декабря 2018

мое приложение находится в C # MVC с фреймворком 4.5.2 и хочет запустить внешний файл (.m) и получить вывод из него, и оно написано в октаве.

Примечание: результат вывода находится в строке, так что я должен показать этот вывод на C # HTML-странице.

Алгоритм написан в октаве, а также в файле алгоритма Excel для чтения данных, а внешние параметры также проходят через C #.

Я пробовал то, что уже опубликовано, основная проблема заключается в том,что мое приложение размещено в лазурном облаке.Поэтому я не могу установить октаву в облаке.Можете ли вы предложить мне любой другой способ, который напрямую запускает внешний файл (.m) с динамическим файлом Excel и параметрами.Я могу показать свой код, что я сделал.Он работает локально со всеми, но я не могу установить Octave в облаке Azure. Я установил свою установленную папку в корневой каталог на сервере, но он также не работает.

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-странице.

...