相关疑难解决方法(0)

在单独的程序中将控制台输出重定向到文本框

我正在开发一个Windows窗体应用程序,它要求我调用一个单独的程序来执行任务.该程序是一个控制台应用程序,我需要将标准输出从控制台重定向到我的程序中的TextBox.

从我的应用程序执行程序没有问题,但我不知道如何将输出重定向到我的应用程序.我需要在程序使用事件运行时捕获输出.

在我的应用程序停止并且文本以随机间隔不断变化之前,控制台程序并不意味着停止运行.我试图做的只是从控制台挂钩输出以触发事件处理程序,然后可以使用它来更新TextBox.

我使用C#编写程序代码并使用.NET框架进行开发.原始应用程序不是.NET程序.

编辑:这是我正在尝试做的示例代码.在我的最终应用程序中,我将用代码替换Console.WriteLine来更新TextBox.我试图在我的事件处理程序中设置断点,甚至没有达到.

    void Method()
    {
        var p = new Process();
        var path = @"C:\ConsoleApp.exe";

        p.StartInfo.FileName = path;
        p.StartInfo.UseShellExecute = false;
        p.OutputDataReceived += p_OutputDataReceived;

        p.Start();
    }

    static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        Console.WriteLine(">>> {0}", e.Data);
    }
Run Code Online (Sandbox Code Playgroud)

.net c# console textbox winforms

49
推荐指数
2
解决办法
5万
查看次数

C#运行时获取进程输出

无论如何,重定向生成的进程的标准输出并将其捕获为它的发生.我看到的所有内容在完成此过程后都会执行ReadToEnd.我希望能够在打印时获得输出.

编辑:

    private void ConvertToMPEG()
    {
        // Start the child process.
        Process p = new Process();
        // Redirect the output stream of the child process.
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        //Setup filename and arguments
        p.StartInfo.Arguments = String.Format("-y -i \"{0}\" -target ntsc-dvd -sameq -s 720x480 \"{1}\"", tempDir + "out.avi", tempDir + "out.mpg");
        p.StartInfo.FileName = "ffmpeg.exe";
        //Handle data received
        p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
        p.Start();
    }

    void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        Debug.WriteLine(e.Data);
    }
Run Code Online (Sandbox Code Playgroud)

c# process redirectstandardoutput

12
推荐指数
2
解决办法
2万
查看次数

Out-Host 是否正在缓冲?

我有一个函数,我可以在其中使用&操作员调用应用程序。该应用程序生成几行命令行输出,下载一些文件,并返回一个字符串:

& "app.exe" | Out-Host
$var = ...
return $var
Run Code Online (Sandbox Code Playgroud)

看来,控制台上app.exe只会出现终止后产生的输出app.exe。用户没有任何实时信息正在下载哪个文件。app.exe有没有办法在运行时不断更新控制台?

powershell

3
推荐指数
1
解决办法
2222
查看次数

C# 进程的实时标准输出/错误捕获

我正在开发一个 C# 应用程序,需要运行外部控制台进程(例如 python 脚本)并实时接收脚本的输出数据。python 脚本是这样的:

import time
while 1:
    print("Hi Foo!")
    time.sleep(.3)
Run Code Online (Sandbox Code Playgroud)

以下 C# 代码在 C# 控制台上实时打印 python 脚本输出:

static void Main(string[] args)
{
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "python.exe";
        process.StartInfo.Arguments = "test.py";
        process.StartInfo.UseShellExecute = false;
        process.Start();
        process.WaitForExit();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试捕获输出数据并手动将它们写入控制台时,我失败了。根据其他帖子推荐的解决方案是这样的,但它不起作用:

static void Main(string[] args)
{
    using (Process process = new Process())
    {
        process.StartInfo.FileName = "python.exe";
        process.StartInfo.Arguments = "test.py";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.EnableRaisingEvents = true;
        process.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
        process.Start(); …
Run Code Online (Sandbox Code Playgroud)

c# python redirect process

3
推荐指数
1
解决办法
1525
查看次数

`Tee-Object` 仅在 stdin 终止后才打印输出

我正在运行一个具有大运行时间和大输出的程序,因此为了在查看输出时进行日志记录,我tee在 windows 上使用命令cmd.exe

./program | tee -a program.log

program打印输出住(具有显着的时间间隙行之后线),但是tee打印仅输出程序终止之后。有什么方法可以tee与实时输出一起使用吗?

注意:该问题在 windows 上也仍然存在 powershell.exe

windows powershell cmd

0
推荐指数
1
解决办法
922
查看次数