そこで、独自の .NET プロセスを使用して、次のようにコマンド ライン プロセスを開始します。
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = redirectOutput;
startInfo.RedirectStandardError = redirectError;
//startInfo.WindowStyle = ProcessWindowStyle.Hidden; //is this necessary for cmd line commands?
startInfo.RedirectStandardInput = false;
startInfo.UseShellExecute = false;
String arguments = "/C PYTHON_SCRIPT";
startInfo.Arguments = arguments;
String pathToProcess = "cmd.exe";
startInfo.FileName = pathToProcess;
startInfo.WorkingDirectory = workingDirectory;
p.StartInfo = startInfo;
p.Start();
プロセスは問題なく実行され、その出力/エラーが表示されます。問題は、実行が完了する前に強制終了したい場合です。コマンドラインは技術的に「PYTHON_SCRIPT」プロセス自体から開始されたため、そのプロセスのプロセスIDが何であるかわかりません! それは私が本当に殺したいものなので(コマンドラインではありません)、私はめちゃくちゃです。実際、コマンドラインプロセスを強制終了して、効果があるかどうかを確認しましたが、効果はありません。
どんな助けでも大歓迎です。
明確でない場合は、「PYTHON_SCRIPT (またはその他の) プロセスを強制終了するにはどうすればよいですか?」という質問があります。
編集:申し訳ありませんが、明確ではありませんでした...私は PYTHON_SCRIPT をフィラーとして使用しています。私はこの方法でさまざまなプロセスを開始していますが、そのすべてが python スクリプトであるとは限りません。一部はバッチ ファイル、一部は python スクリプト、一部は perl スクリプトなどです。
編集 2: 状況は、質問から見えるよりも少し複雑です。たとえば、scons を使用してコードを作成しています。「cmd /C scons」を使用するのは簡単です。ただし、scons プロセスの開始は、Python スクリプトであるため、はるかに困難です。別の作業ディレクトリを渡すので、「python.exe scons.py scons」はまったく機能せず、「scons.bat scons」も機能しません。scons.bat は scons.py を見つける必要があり、scons.py は見つからないからです。私の作業ディレクトリにはありません。