【发布时间】:2014-04-06 12:05:47
【问题描述】:
我想在 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.NET?取决于你在做什么,它工作得很好......
-
@CorleyBrigman:什么是 python.net?
-
请参阅下面 reed 的回答(我们几乎同时发布),因为他在那里有一个链接。它允许您以几乎原生的方式访问 C# 库 - 您甚至可以在控制台中导入 C# 库,并执行一些交互式选项卡补全等。
标签: c# python stdout stdin inter-process-communicat