C# 从Python截获的.NET标准输出在Unity中始终为空

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

我试图使用Python程序将连续的信息流从一个程序发送到另一个程序,比如,但以字节形式

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代码。您是否忘记了导入系统的
?没有这一行,我只得到错误输出的一个输出