Передача данных между 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) 

на стороне питона вместе с

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

а также несколько других вещей, которые не работали на стороне C #. У меня был небольшой успех с некоторыми вещами, но я изменил его настолько, что не помню, для чего он работал. Может ли кто-нибудь дать мне подсказку, какие части будут работать лучше всего, или если это возможно?

Данные, которые я хочу передать, имеют нулевые и другие непечатаемые символы.

2 Solutions collect form web for “Передача данных между Python и C # без записи файла”

Одна из возможностей – использовать что-то вроде Python для .NET , которое обеспечивает взаимодействие между C # и (стандартным, C) Python.

В зависимости от того, что нужно выполнять вашим подпрограммам Python, IronPython также может быть хорошим вариантом, поскольку он напрямую расходуется и может использоваться внутри C #.

Обе эти опции избегают попытки связи через командную строку, так как у вас есть прямой доступ к объектам Python из .NET и наоборот.

Этот код на 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
  • Python считывает из подпроцесса stdout и stderr отдельно при сохранении порядка
  • удалить последнюю строку STDOUT в Python
  • Почему подача stdin на subprocess.Popen вызывает то, что записывается в stdout для изменения?
  • Как получить информацию «в реальном времени» из подпроцесса. Открыть в python (2.5)
  • Как мне взаимодействовать с консольным приложением, как будто я пользователь набираю в него что-то?
  • Необходимо избегать взаимоблокировки подпроцесса без связи
  • Подпроцесс Python с / usr / bin / time: как записывать информацию о времени, но игнорировать все остальные данные?
  • Python - лучший язык программирования в мире.