在Python和C#之间传递数据而不写入文件

在Python和C#之间传递数据而不写入文件,c#,python,stdout,stdin,inter-process-communicat,C#,Python,Stdout,Stdin,Inter Process Communicat,我想在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 f

我想在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()

在python方面,以及

TextReader tIn = Console.In;
TextWriter tOut = Console.Out;
String str = tIn.ReadToEnd();
//etc...
以及其他一些在C#端不起作用的事情。我在一些事情上取得了轻微的成功,但我改变了太多,以至于我不记得是什么起了作用。有没有人能给我一个提示,哪几件最好,或者这是否可能


我要传递的数据有空字符和其他不可打印字符。

一种可能是使用类似的字符,它直接在C#和(标准,C)Python之间提供互操作

根据Python例程需要做什么,它也可以是一个不错的选择,因为它可以从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();

为什么不直接使用python.NET呢?取决于你在做什么,它工作得相当好……相关:@CorleyBrigman:python.net是什么?请参阅下面里德的答案(我们几乎同时发布),因为他在那里有一个链接。它允许您以一种近乎本机的方式访问C#库—您甚至可以在控制台中导入C#库,并执行一些交互式选项卡完成等操作。我遇到了与此处所述相同的错误,请确保您与正在安装的python.NET版本相匹配,对于您拥有的python版本,混合使用这两种版本可能会导致类似这样的奇怪错误。@horblyunpythonic使用python/python for.NET进行版本控制通常是主要问题。
Stream ms = Console.OpenStandardInput();