1

コマンド プロンプトを使用して Python スクリプトを呼び出す C# コードがあります。現在、スクリプトの実行には約 25 秒かかります。コマンド プロンプトで実行すると、python スクリプトにはいくつかの出力があり、最終的に "done" が出力されます。私の C# コードはスクリプトを実行しますが、"WaitForExit" を使用するとコマンド プロンプトが閉じません。したがって、「完了」が出力されたかどうかを確認するために何らかのロジックが必要だと思いますが、インターネットは方法論に関してあまり役に立ちませんでした。

これが私が持っているものです。現在、最初の行「Microsoft Windows [Version 6.1.7601]」のみを出力しています。明らかに、ダメです。

var p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.WorkingDirectory = @"C:\Optimization";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;


p.Start();


p.StandardInput.WriteLine(@"ipy spot_for_labview.py");

    StreamReader mySR = p.StandardOutput;
    string mystr = mySR.ReadLine();
    Debug.WriteLine(mystr);



p.WaitForExit(25000);  //25000 is a placeholder until better method found.

p.Close();

いずれにせよ、終了後にプロセスを閉じるか、すべての cmd 出力を取得する必要がある場合は、私はすべて耳にします。

どんな助けでも大歓迎です。

4

1 に答える 1

1

このイベントを試しましたか?Process.OutputDataReceivedイベント

またはProcess.ErrorDataReceived イベント

ここにMSDNのコードがあります

    Process sortProcess;
    sortProcess = new Process();
    sortProcess.StartInfo.FileName = "Sort.exe";
    sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);

... ... ... ...

private static void SortOutputHandler(object sendingProcess, 
            DataReceivedEventArgs outLine)
        {
}
于 2013-04-15T19:13:14.060 に答える