C# 从Python截获的.NET标准输出在Unity中始终为空
我试图使用Python程序将连续的信息流从一个程序发送到另一个程序,比如,但以字节形式C# 从Python截获的.NET标准输出在Unity中始终为空,c#,python,unity3d,process,ipc,C#,Python,Unity3d,Process,Ipc,我试图使用Python程序将连续的信息流从一个程序发送到另一个程序,比如,但以字节形式 pythonPath和pythonScript只是脚本和python.exe的文件位置 C#代码 publicstaticvoidpythonkernel_测试(){ 进程pythonProcess=Process.Start(新的ProcessStartInfo(){ FileName=pythonPath, 参数=pythonScript, 重定向标准输出=真, 重定向标准输入=真, UseShellEx
pythonPath
和pythonScript
只是脚本和python.exe
的文件位置
C#代码
publicstaticvoidpythonkernel_测试(){
进程pythonProcess=Process.Start(新的ProcessStartInfo(){
FileName=pythonPath,
参数=pythonScript,
重定向标准输出=真,
重定向标准输入=真,
UseShellExecute=false,
CreateNoWindow=true
});
Stream pythonStdOut=pythonProcess.StandardOutput.BaseStream;
对于(int i=0;i<1000;i++){
字节[]缓冲区=新字节[256];
pythonStdOut.Read(缓冲区,0,256);
Log(Encoding.ASCII.GetString(buffer)+Environment.NewLine+BitConverter.ToString(buffer));
}
pythonStdOut.Close();
}
尽管这是统一的,但您可以用Console.WriteLine()
替换Debug.Log
然而,即使我使用SYNC
发送垃圾邮件stdout
,C端也不会显示任何内容。但是,当从shell运行时,它会出现在命令提示中
Python代码
w=sys.stdout.buffer
尽管如此:
w、 写入(b“同步\n”)
sys.stdout.flush()
这里有一个可供试用的工作示例
public static void PythonKernel_Test()
{
var pi = new ProcessStartInfo
{
FileName = "python",
Arguments = "test.py",
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
};
var pythonProcess = new Process
{
StartInfo = pi,
};
pythonProcess.OutputDataReceived+= (s,e) =>
{
Console.WriteLine("OUT: {0}",e.Data);
};
pythonProcess.ErrorDataReceived+= (s,e) =>
{
Console.WriteLine("ERR: {0}",e.Data);
};
pythonProcess.Start();
pythonProcess.BeginOutputReadLine();
pythonProcess.BeginErrorReadLine();
pythonProcess.WaitForExit();
}
它将异步读取输出
取自
test.py
导入系统
尽管如此:
sys.stdout.write(b“SYNC\n”)
sys.stdout.flush()
为什么不仅仅是
sys.stdout.write(b“SYNC\n”)
?我一直在尝试不同的IPC机制,它们都附带使用write()
作为它们的写入函数,比如管道和套接字。如果可能的话,我想同步执行。看看我给你的链接,这里有一个同步和异步的示例哦,你说得对。我没看见。无论哪种方法:两个方法都不返回任何内容。好吧,void方法将返回void,实际上它是空的。我测试了上面的代码,它按预期工作,我还将添加python代码。您是否忘记了导入系统的?没有这一行,我只得到错误输出的一个输出