C#调用python核心代码,并将python中的输出信息实时显示在c#的界面中

本文介绍如何从C#中调用Python脚本并实时捕获其输出,以便在C#界面中显示。提供了具体的代码示例,包括设置Python进程、参数传递、输出重定向及异步读取处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写代码想用python写核心数据处理代码,然而在写界面的时候想用c#来写,现在想通过c#直接调用python的核心处理程序,这里就不讲如何的调用python脚本程序了,有多中方法,网上有很详细的介绍,自己搜。经过我自己的使用,有两种方法比较好用,1、直接调用python脚本,这种方法需要用Python环境,如果你把程序分享给别人,必须要把你的python环境一起打包。2、将python文件打包成exe的形式,这种方法可以用pyinstaller等打包库进行打包,这里也不详细介绍了,自己去搜吧,这种方法在运行的时候会把需要的环境直接打包进exe文件中,所以目标机器不需要安装python环境,但是开始运行时会相对较慢,因为要展开运行环境。

进入正题,之前我的做法都是将输出的消息直接打印到txt中,现在c#调用python文件时,想让python代码中的进度消息如何实时返回到c#的界面中,直接上代码

        public void runPythonScript(string pyFilePath,string filePath,string outPath,string pythonFileName)
        {

            Process p = new Process();
            p.StartInfo.FileName = pythonFileName + "\\python.exe";//设置启动的python.exe路径
            p.StartInfo.Arguments = pyFilePath + " " + filePath + " " + outPath;//设置传入参数
            p.StartInfo.CreateNoWindow = true;//不开启命令行窗口
            p.StartInfo.UseShellExecute = false;//不开启shell
            p.StartInfo.RedirectStandardOutput = true;//将输出文本写入输出流中
            p.StartInfo.RedirectStandardError = true;//将错误写出到输出流中                    
            p.Start();
            p.BeginOutputReadLine();//开始异步读取操作
            p.OutputDataReceived += new DataReceivedEventHandler(OutPutHandler);//这个一定要放在BeginOutputReadLine()后面才好用
            p.WaitForExit();
            p.Close();           
        }

        public void OutPutHandler(object sendingProcess, DataReceivedEventArgs outLine)
        {
            textBox_view.Text = outLine.Data;
            Console.WriteLine(outLine.Data);
        }

pyFilePath是要运行的python文件。一定要注意 p.OutputDataReceived += new DataReceivedEventHandler(OutPutHandler)放在 p.BeginOutputReadLine();的后面。
如果用到线程间的操作,要么去用委托,要么直接关闭线程检查CheckForIllegalCrossThreadCalls = false;当然推荐用正规的委托方法,然而我不太会。哈哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能量鸣新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值