关于C#调用python生成的exe文件一些相关事项

xiaoxiao2021-02-28  15

最近用C#做了一个小系统,基于B/S开发,其中有个小功能需要用到车牌识别。本人水平有限,在网上找到了一个车牌识别的列子,是用python开发的。于是我用pyinstaller将py文件打包成exe文件,用C#直接调用,传递参数并获取返回值。

    首先是C#部分,直接上代码(写在webform中的page_load事件里,方便测试):

Process p = new Process(); p.StartInfo.FileName = Server.MapPath("~") + "testpath/dist/testpath/testpath.exe";//需要执行的文件,我把他放在了网站目录下 p.StartInfo.UseShellExecute = false; //必需 p.StartInfo.RedirectStandardOutput = true;//输出参数设定 p.StartInfo.RedirectStandardInput = true;//传入参数设定 p.StartInfo.CreateNoWindow = true; p.StartInfo.Arguments = @"D:\RecognitionCarNum\img\5.jpg";//参数以空格分隔,如果某个参数为空,可以传入”” p.Start(); string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//关键,等待外部程序退出后才能往下执行} Response.Write(output);//输出 p.Close();

下面是python部分,我只是简单的执行python打包的exe文件:

import os import sys #有参数的函数 def show(img_path): f = open("D:/pathdata") #这里需要用到绝对路径,下面会详细解释 return f.read()+img_path if __name__ == '__main__': print(os.getcwd()) print(show(sys.argv[1])) #表示传递进来的参数,sys.argv[0]表示文件本身名字,从1开始,依次类推

单独运行exe文件时,需要把pathdata文件放在exe文件所在的目录下。然后我依样画葫芦,将整个exe文件夹拷贝到C#网站项目目录下,执行的时候发现找不到pathdata文件(此时我的路径还未改成绝对路径)。重点在路径这里:exe文件在IIS上运行时,exe程序内查找的当前路径其实并不是exe程序文件所在的路径。有点拗口,下面详细地说明:

比如我的exe程序文件在D:/dist文件夹下,如果我本地电脑上运行,那么将会查找dist文件夹下的内容。但是现在我是在IIS上调用exe文件,可以理解为,exe文件查找的文件路径应该是IIS所在的路径。因为我也不清楚具体的IIS路径在哪里,所以选择使用绝对路径。所以我将pathdata等一些需要外部查找的配置及其他文件放在D盘下。

经过测试,发现OK,可以传递参数,也可以取得返回值。具体截图如下:

转载请注明原文地址: https://www.6miu.com/read-2100253.html

最新回复(0)