Постоянно запускать интерпретатор Python как процесс Unity3D C # - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь интегрировать библиотеку Python в Unity3D.К сожалению, я не могу использовать IronPython, поскольку мне нужно использовать .pyd, который является результатом компиляции библиотеки C ++ с использованием Boost Python.

Таким образом, я просто хотел, чтобы процесс работал с интерпретатором Pythonвнутри, и я бы просто синхронно вызывал функции в интерпретаторе и читал вывод.Мне нужен переводчик, чтобы он оставался в живых, поскольку он должен сохранять состояние в течение долгого времени.

То, что я пытаюсь сделать, к сожалению, не работает, и я не уверен, чего мне не хватает.

    var process = new System.Diagnostics.Process();
    process.StartInfo.FileName = "python";
    process.StartInfo.Arguments = "-i";
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.RedirectStandardOutput = true;

    process.Start();

    var input = process.StandardInput;
    var error = process.StandardError;
    var output = process.StandardOutput;

    string line;

    // This would ideally "purge" the initial output from Python, 
    // even though for some reason it is terminating the process.
    Debug.Log("first output:");
    while ((line = output.ReadLine()) != null)
        Debug.Log(line);
    Debug.Log("first error");
    while ((line = error.ReadLine()) != null)
        Debug.Log(line);

    // Here I try to pass some commands to the Python interpreter.
    // Even if I remove the outputs from before, I only get
    // "invalid syntax errors" from Python.
    Debug.Log("Passing input");
    input.WriteLine("print('test')");

    // Try to read the 'test' output from Python.
    Debug.Log(output.ReadLine());

    // Exit the interpreter
    input.WriteLine("exit()");

    process.WaitForExit();
    process.Close();

Я думаю, что здесь есть несколько ошибок, от того, как я пытаюсь "очистить" вывод процесса Python, от способа, которым я пытаюсь передать ввод, но я не уверен, что делатьпо-разному.

РЕДАКТИРОВАТЬ: Я думаю, "очистка" ввода путем отправки пары пустых строк в Python исправляет мои проблемы с вводом.Процесс невозможен, так как нет неблокирующего способа проверить, есть ли еще выходные данные для чтения.Даже Пик, кажется, зависает.Я все еще смотрю на это ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...