首页 > 编程语言 >C# 启动 Python 不能及时获取输出信息

C# 启动 Python 不能及时获取输出信息

时间:2024-03-11 16:13:45浏览次数:27  
标签:__ Process process string 输出 C# sys Python print

结论:
在print函数前加上sys.stdout.flush()
有的说加载print之后,都可以试试。

from time import sleep
import sys

if __name__=="__main__":
    sys.stdout.flush()
    print("Start")
    for i in range(10000):
        # sys.stdout.write(str(i))
        sys.stdout.flush()
        print(i)
        sleep(0.5)
    print("End")

pass

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string pythonPath = @"C:\Users\vivi\AppData\Local\Programs\Python\Python310-32\python.exe";
            string pyFilePath = @"C:\Users\vivi\source\repos\WpfApp27\WpfApp27\bin\Debug\net6.0-windows\main.py";


            //调用python
            process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = pythonPath,
                    Arguments = $"{pyFilePath}",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    CreateNoWindow = true,
                },
                EnableRaisingEvents = true
            };

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            process.StartInfo.StandardOutputEncoding = Encoding.UTF8;
            process.StartInfo.StandardErrorEncoding = Encoding.UTF8;
            process.ErrorDataReceived += Process_ErrorDataReceived;
            process.OutputDataReceived += Process_OutputDataReceived;

            process.Exited += async (sender, args) =>
            {
                //立即销毁的话,可能有的消息收不到i
                await Task.Delay(5000);
                process.Dispose();


            };
            Task.Factory.StartNew(() =>
            {
                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();
                process.WaitForExit();
                Console.Read();
            });
        }

        private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(e.Data))
                    return;

                Debug.WriteLine(e.Data);
            }
            catch (Exception err)
            {
                throw err;
            }
        }

        private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(e.Data))
                    return;

                Debug.WriteLine(e.Data);
            }
            catch (Exception err)
            {
                throw err;
            }
        }

标签:__,Process,process,string,输出,C#,sys,Python,print
From: https://www.cnblogs.com/hupo376787/p/18066366

相关文章

  • EasyNVR级联EasyCVR后,EasyCVR播放视频导致EasyNVR崩溃是什么原因?
    视频综合管理平台EasyCVR视频监控系统支持多协议接入、兼容多类型设备,平台可以将监控区域内所有部署的监控设备进行统一接入与集中汇聚管理,实现对监控区域的实时视频监控、录像与存储、设备管理、云台控制、语音对讲、级联共享等,在监控中心配置电视墙或电子大屏,可以实时展示区域的......
  • 使用vscode插件生成小型c项目
    VScode生成c小型项目1.VScode安装C/C++projectcreator2.在磁盘任意位置创建一个文件夹名称(最好易懂)3.vscode顶部菜单栏点击文件或者快捷键f打开刚创建的文件夹​3.1在vscode界面下按ctrl+shift+p输入createC++Project​3.2生成的文件夹&文件有include------......
  • C陷阱与缺陷:语法陷阱
    @目录语法陷阱引入理解函数声明表达式什么是表达式表达式的目的声明函数名本质对复杂代码分析运算符的优先级switch语句悬挂else语法陷阱引入要理解一个C程序,仅仅理解组成该程序的符号是不够的。程序员还必须理解这些符号是如何组合成声明、表达式、语句和程序的。虽然这......
  • C语言判断表达式的写法3<keyDown && keyDown<14
    if(3<keyDown&&keyDown<14){//Yourcodehere}可以写成if(3<keyDown<14){//Yourcodehere}吗答案:不能,因为在C语言中,if(3<keyDown&&keyDown<14) 和 if(3<keyDown<14) 是不同的。在C语言中,3<keyDown......
  • python的一些设置
    一1全局设置pip加速。查找pip.ini文件,添加以下代码[global]index-url=http://pypi.tuna.tsinghua.edu.cn/simple/[install]trusted-host=pypi.tuna.tsinghua.edu.cn2执行poetryinstall命令单个项目:pyproject.toml文件加入以下内容可以加速[[tool.poetry.sourc......
  • 找不到包 Microsoft.NETCore.App.Crossgen2.win-x64。源 Microsoft Visual Studio Off
    问题找不到包System.IO.Packaging,源MicrosoftVisualStudioOffilinePackages中不存在具有此ID的包 解决打开工具-Nuget相关可以尝试再命令行里用 nugetrestore但是这种情况应该是没有设置源。在选项里面,新建一个程序包源,填写以下源地址(或者其他nuget源)就能修复。......
  • redhat / centos开启关闭防火墙
    转载自:https://www.cnblogs.com/yigemaodou/p/14245680.html================== (一)redhat6/centos6在redhat6/centos6中,Linux默认的防火墙是iptables,启动与关闭方式如下:#查看防火墙状态serviceiptablesstatus#临时开启,重启机器后失效serviceiptablesstart#临时关......
  • flask-sqlalchemy模块的使用
    flask-sqlalchemy集成到flask中1下载模块pipinstallflask-sqlalchemy--upgrade2__init__文件中导入模块fromflaskimportFlaskfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__,template_folder='../templates',static_folder='../static'......
  • hackthebox sandworm medium writeup
    Thisisthewriteupforthemediummachine'onlyrforyou'.Topiccoveredinthisarticleare: LFI,commnadinjection,neo4jcipherinjection,maliciouspythonpackagesandcodeexecutionviapipdownload.ShellasuserSubdomainenumeration:ffuf......
  • WPF RichTextBox 文本超过限定行数移除旧数据
    在使用serilog.sinks.richtextbox显示日志时,会需要移除旧的日志信息的需求,实现打码如下;根据换行符“\n”进行判断; privatevoidCheckAndRemoveText(){intnewLineCount=0;boolremoveText=false;foreach(Paragraphparagraphin_richTex......