我正在尝试将Python库集成到Unity3D中。不幸的是,我无法使用IronPython,因为必须使用.pyd
,这是使用Boost Python编译C ++库的结果。
因此,我只是想让一个进程在内部使用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发送一些空行来“刷新”输入可解决我的输入问题。
另一方面,似乎不可能从正在运行的Process同步获取输出,因为没有非阻塞方法来检查是否还有更多要读取的输出。甚至Peek也似乎挂死了。我仍在调查中。.