【问题标题】:Process.StandardOutput.Readline() hangs on Mono but not on .NETProcess.StandardOutput.Readline() 在 Mono 上挂起,但在 .NET 上没有
【发布时间】:2013-02-04 18:24:55
【问题描述】:

我正在尝试让一个在 Mono(在 Ubuntu 上)上运行的 C# 程序调用 python 脚本,将数据发送到其标准输入,并从其标准输出读回数据。下面的测试代码抓住了基本思想:

var startInfo = new ProcessStartInfo("python");
startInfo.Arguments = "./hello.py";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;

var p = Process.Start(startInfo);
if(p.HasExited)
    return;

p.StandardInput.WriteLine("Bob");
var result = p.StandardOutput.ReadLine();
Console.WriteLine("Result: {0}", result);

hello.py 的代码很简单:

#!/usr/bin/python
line = raw_input()
while len(line) > 0:
    print("Hello " + line)
    line = raw_input()

当我在 .NET/Windows 上执行此测试代码时,上面的测试按预期工作,返回结果“Hello Bob”。但是在 Mono/Linux 上,C# 程序挂起对p.StandardOutput.ReadLine(); 的调用。知道为什么它不能在 Mono/Linux 上运行,以及我需要进行哪些更改才能使其正常运行吗?

【问题讨论】:

    标签: python mono stdout stdin


    【解决方案1】:

    回答我自己的问题...原来这与 Mono 或 Linux 无关,而是 Python 在 Windows 和 Linux 上的行为。要让它在 Linux 上运行,需要使用 -u 标志(无缓冲输出)调用 Python,以便打印的数据实际上被刷新到标准输出。感谢 Mono 邮件列表中的“weeble”提供提示!

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      相关资源
      最近更新 更多