hor*_*nic 5 c# python stdin stdout 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 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)
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的使用标准输入/输出的方法,但我没有运气将它们匹配起来,就像我说的,有很多移动部件。我尝试过类似的事情
p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin.write(blob)
p.stdin.close()
Run Code Online (Sandbox Code Playgroud)
或者
p = subprocess.Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = p.communicate(blob)
Run Code Online (Sandbox Code Playgroud)
在 python 一侧以及
TextReader tIn = Console.In;
TextWriter tOut = Console.Out;
String str = tIn.ReadToEnd();
//etc...
Run Code Online (Sandbox Code Playgroud)
以及其他一些在 C# 端不起作用的东西。我在某些事情上取得了一些成功,但我已经改变了太多,以至于我不记得什么是有效的。有人可以给我一些提示,告诉我哪些部分效果最好,或者这是否可能?
我想要传递的数据有空和其他不可打印的字符。
这个Python代码是正确的
p = Popen(C_SHARP_EXECUTABLE_FILE_PATH, stdout=PIPE, stdin=PIPE, stderr=PIPE)
out, err = p.communicate(blob)
Run Code Online (Sandbox Code Playgroud)
在 C# 方面,我让它可以使用
Stream ms = Console.OpenStandardInput();
Run Code Online (Sandbox Code Playgroud)