【发布时间】:2014-04-02 20:55:34
【问题描述】:
尝试不同的进程间通信方法。
我有一个 C# 应用程序,它生成一个 ruby 进程并重定向 ruby 进程的 stdin 和 stdout,以便 C# 应用程序可以向 ruby 进程发送指令,而 ruby 进程可以发回一些东西。
鲁比:
cmd = STDIN.read
p "Test command received!" if cmd.downcase == "test"
C#
static void Main(string[] args)
{
ProcessStartInfo procInfo = new ProcessStartInfo("ruby");
procInfo.Arguments = "stdinTest.rb";
procInfo.UseShellExecute = false;
procInfo.RedirectStandardInput = true;
procInfo.RedirectStandardOutput = true;
proc = new Process();
proc.StartInfo = procInfo;
proc.Start();
proc.StandardInput.Write("test");
proc.StandardInput.Close();
Console.WriteLine(proc.StandardOutput.ReadLine());
}
这假定 Ruby 位于 sys 路径上,并且 ruby 脚本与 C# 应用程序位于同一文件夹中。
当我运行 C# 应用程序时,它会打印出“收到测试命令!”正如预期的那样。
但是,值得怀疑的一件事是我正在关闭进程的标准输入……这意味着我不能再写它了。
如果我删除 close,它就会挂起。大概是因为 Ruby 没有得到一个预期的字符来告诉它停止阅读。
如果我使用flush,它没有任何区别。
这次交流有什么问题?
C# 是否有不同的方式将数据发送到 ruby 的 STDIN?
Ruby 应该以不同的方式从 STDIN 读取数据吗?
【问题讨论】:
标签: c# ruby inter-process-communicat