1

だからここに私の問題があります:

  1. Process クラスを介して C# から起動された Python スクリプトでは、-i スイッチを python.exe に渡す必要があります。そうしないと、StandardXxx ストリームをリダイレクトするときに出力が送信されません。
  2. Python プログラムを py2exe (または、必要に応じて別の同様のセットアップ) にバンドルしたい
  3. 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 スイッチなしで同じ問題が発生します。

期待どおりに動作させるにはどうすればよいですか?

4

0 に答える 0