Я пытаюсь интегрировать библиотеку 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 исправляет мои проблемы с вводом.Процесс невозможен, так как нет неблокирующего способа проверить, есть ли еще выходные данные для чтения.Даже Пик, кажется, зависает.Я все еще смотрю на это ..