【问题标题】:Passing data between Python and C# without writing a file在 Python 和 C# 之间传递数据而不写入文件
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 我得到了与这里描述的相同的错误,stackoverflow.com/questions/14633695/…
  • 确保您安装的 python.NET 版本与您拥有的 python 版本相匹配 - 将两者混合会导致类似的奇怪错误。
  • @horriblyUnpythonic .NET 的 python/python 版本控制通常是主要问题。
【解决方案2】:

这个python代码是正确的

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

在 C# 方面,我可以使用它

Stream ms = Console.OpenStandardInput();

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多