I have worked on this issue for a while. I can capture the output(live) of the console window just fine, but I can't capture the output of a python console application in real time. I can capture the output of the python program after it has finished running, but i don't want that. I am using process from system.diagonistics. with a background worker. I simply want to capture the python26 output onto a text box. I have tested my program with other custom applications, and it does display the output(live).
Help please
Thanks
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Threading; using System.IO; namespace ProcessDisplayoutput { public partial class Form1 : Form { //Delegates delegate void AppendTextDelegate(string text); public Form1() { InitializeComponent(); Worker.DoWork += new DoWorkEventHandler(Worker_DoWork); } private void StartButton_Click(object sender, EventArgs e) { ResultTextBox.Clear(); if (!Worker.IsBusy) { Worker.RunWorkerAsync(); } } public void Worker_DoWork(object sender, DoWorkEventArgs e) { Process pro = new Process(); pro.StartInfo.RedirectStandardOutput = true; pro.StartInfo.RedirectStandardError = true; pro.StartInfo.UseShellExecute = false; pro.StartInfo.CreateNoWindow = true; pro.EnableRaisingEvents = true; pro.OutputDataReceived +=new DataReceivedEventHandler(OnDataReceived); pro.ErrorDataReceived +=new DataReceivedEventHandler(OnDataReceived); //Test with random program worked, //now need to test with python //*****************TEST 1: PASSED ************************** pro.StartInfo.FileName = "C:\\TestProcessOutput.exe"; //*****************END TEST1******************************* //*****************TEST 2: FAILED ************************* //pro.StartInfo.FileName = "C:\\Python26\\python.exe"; //pro.StartInfo.Arguments = "\"C:\\Python26\\testScript.py\""; //*****************END TEST2 ******************************* StreamReader sr = null; try { pro.Start(); pro.BeginOutputReadLine(); //An alternative option to display the output with the same results //sr = pro.StandardOutput; //string line = ""; //while ((line = sr.ReadLine()) != null) //{ // appendText(line); // } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } public void OnDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { string temp = (e.Data) + Environment.NewLine; appendText(temp); } } public void appendText(string text) { if (ResultTextBox.InvokeRequired) { ResultTextBox.Invoke(new AppendTextDelegate(appendText), new object[] { text }); } else { ResultTextBox.AppendText(text); } }