【发布时间】:2015-01-08 23:06:00
【问题描述】:
我正在尝试将 C# 中的 Python 脚本作为流运行,并使用 StreamWriter 和 StreamReader 在 Python 和流之间重复传递输入和输出。
我可以读写,但显然只能一次,而不是多次。 (这是我需要的。) 希望有人能告诉我我做错了什么。
(我知道我可能可以通过读取和写入文件来做我需要做的事情。但是,如果可以的话,我想避免这种情况,因为使用 Stream 看起来更干净。)
这是我的 C# 代码:
using System;
using System.Diagnostics;
using System.IO;
public class Stream_Read_Write
{
public static void Main()
{
string path = "C:\\Users\\thomas\\Documents\\Python_Scripts\\io_test.py";
string iter = "3";
string input = "Hello!";
stream_read_write(path, iter, input);
//Keep Console Open for Debug
Console.Write("end");
Console.ReadKey();
}
private static void stream_read_write(string path, string iter, string input)
{
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = "C:\\Python27\\python.exe";
start.Arguments = string.Format("{0} {1}", path, iter);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
start.RedirectStandardInput = true;
start.CreateNoWindow = true;
using (Process process = Process.Start(start))
using (StreamWriter writer = process.StandardInput)
using (StreamReader reader = process.StandardOutput)
{
for (int i = 0; i < Convert.ToInt32(iter); i++)
{
Console.WriteLine("writing...");
writer.WriteLine(input);
writer.Flush();
Console.WriteLine("written: " + input + "\n");
Console.WriteLine("reading...");
string result = reader.ReadLine();
Console.WriteLine("read: " + result + "\n");
}
}
}
}
Python 代码如下所示:
import sys
iter = int(sys.argv[1])
for i in range(iter):
input = raw_input()
print (input)
这是我得到的输出:
writing...
written: Hello!
reading...
奇怪的是,当我从 Python 和 C# 中删除循环时,它可以工作。 (一次迭代)
writing...
written: Hello!
reading...
read: Hello!
end
我不清楚为什么会发生这种情况,或者解决方案可能是什么,因此非常感谢任何帮助。
【问题讨论】:
标签: c# python io stream read-write