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