通过stdout / stdin在py2exe可执行文件和C#程序之间进行通信

时间:2012-11-30 06:29:06

标签: c# python python-2.7 py2exe

所以这是我的问题:

  1. 通过Process类从C#启动的Python脚本需要将-i开关传递给python.exe,否则当我重定向StandardXxx流时它们不会发送任何输出
  2. 我想用py2exe捆绑我的Python程序(或其他类似的设置,如果符合我的需要)
  3. py2exe似乎没有让我以任何明显的方式传递-i开关,但它给出了与运行python.exe相同的问题 - 它在我的C#程序启动时不会输出任何内容。所以我需要一种强制它进入类似模式的方法,这样我才能真正通过stdin / stdout接收和发送消息。当它使用“windows = ['my_script']”构建时,我发现了一些类似的问题,但我使用“console = ['my_script']”构建它,所以这些修复没有帮助,我不需要实际的交互模式(即REPL),但出于某种原因,-i开关修复了控制台IO问题。
  4. 这是我用来启动它的代码:

    ProcessStartInfo psi = new ProcessStartInfo();
    
    psi.UseShellExecute = false;
    psi.RedirectStandardInput = true;
    psi.RedirectStandardOutput = true;
    psi.RedirectStandardError = true;
    
    psi.FileName = "py2exe_program.exe";
    
    Process p = Process.Start(psi);
    
    // program hangs here because ready message is never printed
    p.StandardOutput.ReadLine(); // Consume ready message
    

    可执行文件在外部启动时按预期工作,上面的代码在我通过“python.exe -i my_script.py”启动Python脚本时有效,但是在没有-i开关的情况下遇到同样的问题。

    如何让它按预期行事?

0 个答案:

没有答案