Как мне перебрать аргументы с одним экземпляром ProcessStart? - PullRequest
0 голосов
/ 16 февраля 2019

Я использую следующую процедуру для запуска экземпляра python для запуска файла py.

public void ClassifyImages(string imagesString)
        {
            // https://medium.com/emoney-engineering/running-python-script-from-c-and-working-with-the-results-843e68d230e5
            // https://www.tensorflow.org/hub/tutorials/image_retraining

            ProcessStartInfo start = new ProcessStartInfo();
            Process process = new Process();

            start.FileName = txtPythonClassify.Text;
            string cmd = String.Format("python\\{0}", py.PrjClassifyFile);
            start.Arguments = string.Format(@"{0} {1}", cmd, imagesString);

            start.UseShellExecute = false;
            start.CreateNoWindow = true;
            start.RedirectStandardOutput = !start.UseShellExecute;
            start.RedirectStandardError = !start.UseShellExecute;

            process.StartInfo = start;

            process.OutputDataReceived += CaptureClassifyOutput;
            process.ErrorDataReceived += CaptureClassifyError;
            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            process.EnableRaisingEvents = true;
            process.Exited += new EventHandler(classify_Exited);
        } 

Это работает нормально, но мне нужно циклически перебирать аргументы вместо инициализации start.FileName для каждого вызова.Примерно так:

start.FileName = "main.py"

            start.UseShellExecute = false;
            start.CreateNoWindow = true;
            start.RedirectStandardOutput = !start.UseShellExecute;
            start.RedirectStandardError = !start.UseShellExecute;
            process.OutputDataReceived += CaptureClassifyOutput;
            process.ErrorDataReceived += CaptureClassifyError;

            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            process.EnableRaisingEvents = true;
            process.Exited += new EventHandler(classify_Exited);
foreach(var s in arguments) //asumming arguments is a list)
{
            start.Arguments = s
            process.StartInfo = start;
            process.Start();
}

Какая лучшая практика?

...