C# 显示正在运行的cmd进程的输出

C# 显示正在运行的cmd进程的输出,c#,C#,我有一个C代码,它使用命令提示符调用python脚本。脚本当前运行大约需要25秒。在命令提示符下运行时,python脚本有几个输出,直到最后输出“done”。我的C#代码运行脚本,但如果我使用“WaitForExit”,就不会关闭命令提示符。所以我的想法是,我需要某种逻辑来检查“完成”是否已经输出,但互联网在方法论上并没有太大帮助 这是我所拥有的,它目前只输出第一行,“MicrosoftWindows[Version6.1.7601]”。显然,这不好 var p = new Process();

我有一个C代码,它使用命令提示符调用python脚本。脚本当前运行大约需要25秒。在命令提示符下运行时,python脚本有几个输出,直到最后输出“done”。我的C#代码运行脚本,但如果我使用“WaitForExit”,就不会关闭命令提示符。所以我的想法是,我需要某种逻辑来检查“完成”是否已经输出,但互联网在方法论上并没有太大帮助

这是我所拥有的,它目前只输出第一行,“MicrosoftWindows[Version6.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输出,我洗耳恭听

非常感谢您的帮助。

您是否尝试过此活动?事件

这是来自MSDN的代码

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

你参加过这个活动吗?事件

这是来自MSDN的代码

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


是的,我无法让它工作。它将输出所有内容,但直到我手动关闭命令提示符。不过没有。我不确定-Q会做什么…?ProcessEXE.StartInfo.Arguments=Parameters?你在用这个吗不,有必要吗?我只是在StandardInput.WriteLine行中包含了所有内容。是的,我无法让它工作。它将输出所有内容,但直到我手动关闭命令提示符。不过没有。我不确定-Q会做什么…?ProcessEXE.StartInfo.Arguments=Parameters?你在用这个吗不,有必要吗?我只是在StandardInput.WriteLine行中包含所有内容。您的第一个建议似乎没有输出任何内容。如果没有某种事件结构或循环,我看不出这是如何工作的,当它第一次点击“Debug.WriteLine”行时,我需要的输出还没有发生。如果我使用p.BeginOutputReadLine(),我还需要使用什么方法来捕获输出?我不能使用p.StandardOutput,很明显这是同步。这个链接可能会有帮助!!!-似乎只需要process.BeginOutputReadLine()就可以了,它可以让一切都可见吗?在我的情况下不起作用。你的第一个建议似乎没有任何结果。如果没有某种事件结构或循环,我看不出这是如何工作的,当它第一次点击“Debug.WriteLine”行时,我需要的输出还没有发生。如果我使用p.BeginOutputReadLine(),我还需要使用什么方法来捕获输出?我不能使用p.StandardOutput,很明显这是同步。这个链接可能会有帮助!!!-似乎只需要process.BeginOutputReadLine()就可以了,它可以让一切都可见吗?对我来说不起作用。