在不编写文件的情况下在Python和C#之间传递数据

我想在Python和C#之间传递二进制信息。 我假设您可以打开一个标准的输入/输出通道,并像文件一样读写,但是有很多可移动的部分,而且我不太了解C#。 我想做这种事情,但不写文件。

# python code with open(DATA_PIPE_FILE_PATH, 'wb') as fid: fid.write(blob) subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH) with open(DATA_PIPE_FILE_PATH, 'rb') as fid: 'Do stuff with the data' // C# code static int Main(string[] args){ byte[] binaryData = File.ReadAllBytes(DataPipeFilePath); byte[] outputData; // Create outputData File.WriteAllBytes(outputData) 

我已经尝试了几种使用标准输入/输出的不同方法,但我没有运气匹配它们,就像我说的那样,有许多活动部件。 我尝试过类似的东西

 p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE) p.stdin.write(blob) p.stdin.close() 

要么

 p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE) out, err = p.communicate(blob) 

在python一边随着

 TextReader tIn = Console.In; TextWriter tOut = Console.Out; String str = tIn.ReadToEnd(); //etc... 

以及其他一些在C#方面不起作用的东西。 我在某些方面取得了一些成功,但我已经改变了很多,以至于我不记得什么对什么有效。 有人可以给我一个提示,哪些部件最好,或者甚至可能?

我想传递的数据包含null和其他不可打印的字符。

一种可能性是使用像Python for .NET这样的东西,它直接在C#和(标准,C)Python之间提供互操作。

根据您的Python例程需要做什么, IronPython也可以是一个很好的选择,因为它可以在C#中直接使用和使用。

这两个选项都避免尝试通过命令行进行通信,因为您可以直接从.NET访问Python对象,反之亦然。

这个python代码是正确的

 p = Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdout=PIPE, stdin=PIPE, stderr=PIPE) out, err = p.communicate(blob) 

在C#方面,我得到了它

 Stream ms = Console.OpenStandardInput();