我试图从我的程序在 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 脚本正在使用 tqdm.rich。通过删除“.rich”并使用常规 tqdm,您可以通过标准输出捕获进度条。
所以在Python脚本中我改变了:
from tqdm.rich import tqdm
至:
from tqdm import tqdm
希望有帮助!