Przekierowanie standardowego wejscia/wyjscia ze skryptu Python do aplikacji w C#.

0

Witam,

probuje zaimplementowac komunikacje ze skryptem w pythonie, ktory wywoluje w C#.
Sam odczyt standardowego wyjscia dziala, jednak potrzebuje po odczytaniu wyjscia wyslac sygnal "tirgger" do skryptu poprzez standardowe wejscie.

Chcialbym zeby to wygladalo tak:
Odpalam skrypt->czytam wyjscie ze skryptu->skrypt czeka na wcisniecie klawisza->symuluje wcisniecie klawisza przez standardowe wejscie (trigger)->odczytuje wynik po wykonanej operacji.

NIe bardzo wiem jak to zsynchronizowac. Teraz jak zaczynam czytanie to aplikacja zatrzymuje sie w tym miejscu i zaden inny przycisk z UI nie dziala.
Metody Read,Write,Run sa przypisane do buttonow.
Prosze o wskazowki jak to wszystko ladnie ogarnac. Z gory dziekuje.

   public void RunPythonScript(string scriptName, string args)
        {

            ProcessStartInfo start = new ProcessStartInfo();
            start.FileName = @"C:\Python36\python.exe";
            start.Arguments = string.Format("{0} {1}", scriptName, args);
            start.UseShellExecute = false;
            start.RedirectStandardOutput = true;
            start.RedirectStandardInput = true;
            start.CreateNoWindow = true;
             var pythonScript = Process.Start(start);
            pythonWriter = pythonScript.StandardInput;
            pythonReader = pythonScript.StandardOutput;

            // odczyt ponizej dziala, jednak w osobnej funkcji nie.
            //using (pythonScript)
            //{
            //    using (StreamReader reader = pythonScript.StandardOutput)
            //    {
            //        string result = reader.ReadToEnd();
            //        Console.Write(result);

            //    }        
            //}
        }
        public void ReadLine()
        {
            using (pythonReader)
            {
                string result = pythonReader.ReadLine();
                Console.WriteLine(result);
            }
           
        }
       
         public void WriteLine()
          {
            using (pythonWriter)
            {
                pythonWriter.Flush();
                pythonWriter.WriteLine("U");
            }
        }
1

Nie możesz robić ReadToEnd, bo to blokuje cały skrypt. Odczytuj asynchronicznie bez blokowania wątku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1