从 Form 中的 CMD 窗口获取进度

问题描述 投票:0回答:1

我试图从我的程序在 CMD 中执行的进程(它是一个 python 脚本)获取进度信息。我可以成功地从控制台读取每一行,并使用 GetStandardOutput 和 ReadLine 将其发送到文本框,所以这不是问题。

但是,当进程启动进度条时,不会将任何有关它的信息发送到我的文本框,它只是等待进度完成,然后再发送任何新信息。我不希望文本框显示进度条,但会显示某种信息,例如百分比?这样我就可以将该数据解析为进度条。

控制台窗口如下所示:

这是我获取控制台输出的代码:

 Private Sub StartConsoleProcess()
     Dim startInfo As New ProcessStartInfo()
     startInfo.FileName = "cmd.exe"
     startInfo.RedirectStandardInput = True
     startInfo.RedirectStandardOutput = True
     startInfo.RedirectStandardError = True
     startInfo.UseShellExecute = False
     startInfo.CreateNoWindow = False
     startInfo.WorkingDirectory = appPath
     startInfo.WindowStyle = ProcessWindowStyle.Normal
     startInfo.Arguments = $"/K title AnimateDiff"

     adProc = New Process()
     adProc.StartInfo = startInfo

     AddHandler adProc.OutputDataReceived, AddressOf ProcessOutputHandler
     AddHandler adProc.ErrorDataReceived, AddressOf ProcessErrorHandler

     adProc.Start()

     adProc.BeginOutputReadLine()
     adProc.BeginErrorReadLine()
 End Sub

 Private Sub ProcessOutputHandler(sender As Object, e As DataReceivedEventArgs)
     If e.Data IsNot Nothing Then
         AppendOutputText(e.Data)
     End If
 End Sub

 Private Sub ProcessErrorHandler(sender As Object, e As DataReceivedEventArgs)
     If e.Data IsNot Nothing Then
         AppendOutputText(e.Data)
     End If
 End Sub

 Private Sub AppendOutputText(text As String)
     If ConsoleOutput.InvokeRequired Then
         ConsoleOutput.Invoke(New Action(Of String)(AddressOf AppendOutputText), text)
     Else
         ConsoleOutput.AppendText(text & Environment.NewLine)
     End If
 End Sub
python vb.net cmd console
1个回答
0
投票

如果其他人也有同样的问题,我设法以非常简单的方式解决它。

问题在于 Python 脚本正在使用 tqdm.rich。通过删除“.rich”并使用常规 tqdm,您可以通过标准输出捕获进度条。

所以在Python脚本中我改变了:

from tqdm.rich import tqdm

至:

from tqdm import tqdm

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.