解决方案
在print后调用一下sys.stdout.flush()即可实时读到命令行的内容
print(os.path.join(self.imagefile, filename + ".jpg")) sys.stdout.flush() # 清空缓冲区,实时输出
C# 调用python并接收命令行方法
////// 执行命令行工具 /// public static bool Execute(string processPath, string arguments, string workingDirectory, ActionoutputCallBack = null, Encoding encoding = null, bool showWindow = false, double? timeout = null) { try { var processStartInfo = new ProcessStartInfo() { FileName = processPath, Arguments = arguments, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, WorkingDirectory = workingDirectory, StandardOutputEncoding = encoding == null ? Encoding.UTF8 : encoding, #if DEBUG WindowStyle = ProcessWindowStyle.Minimized, CreateNoWindow = false #else WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true #endif }; if (showWindow) { processStartInfo.WindowStyle = ProcessWindowStyle.Minimized; processStartInfo.CreateNoWindow = false; } using (var progress = Process.Start(processStartInfo)) { if (null == progress) return false; if (timeout != null) { var dateTime = DateTime.Now; DateTime finshTime = dateTime.AddSeconds((double)timeout); Task.Factory.StartNew(() => { while (true) { if (finshTime < DateTime.Now || progress == null) { progress.Kill(); progress?.Close(); break; } Thread.Sleep(1000); } }); } progress.OutputDataReceived += (sender, arg) => { try { if (!string.IsNullOrEmpty(arg.Data) && null != outputCallBack) outputCallBack(arg.Data); } catch (Exception ex) { } }; progress.ErrorDataReceived += (sender, arg) => { try { if (!string.IsNullOrEmpty(arg.Data) && null != outputCallBack) outputCallBack(arg.Data); } catch (Exception ex) { } }; progress.BeginErrorReadLine(); progress.BeginOutputReadLine(); progress.WaitForExit(); progress.Close(); } return true; } catch (Exception ex) { return false; } }



