繁体   English   中英

通过ASP.NET Web API中的bat文件运行python脚本

[英]Running python script in through a bat file in a ASP.NET Web API

我正在尝试运行python脚本。 它运行来自喀拉拉邦的训练有素的模型。 我使用C#Web API。 我开了头,想让python脚本运行。 我已经通过.bat文件实现了。 它在Windows窗体项目上完美工作。 蝙蝠本身也可以正常工作。 Web API要运行.bat文件时会出现问题,由于某种原因,当我通过IIS Express运行脚本时,它将无法识别该模型应该读取的data.csv文件。

让我向您展示一些代码运行bat文件

           System.Diagnostics.Process.Start(@"pathtobatfile\runner.bat");

蝙蝠文件

pathtoenviroment\python.exe pathtoscript\AI.py %*
PAUSE

好吧,所以当我在IIS Express之外运行它时,它可以正常工作,但是当我在Web API上运行它时,它就可以了...

追溯(最近一次通话):文件“ D:\\ AIASSETS \\ AI.py”,第13行,在q = pd.read_csv('data.csv')文件“ C:\\ Users \\ Marco \\ Anaconda3 \\ envs \\ entornotensor \\ lib \\ site-packages \\ pandas \\ io \\ parsers.py“,第678行,在parser_f中返回_read(filepath_or_buffer,kwds)文件” C:\\ Users \\ Marco \\ Anaconda3 \\ envs \\ entornotensor \\ lib \\ site \\ packages \\ pandas \\ io \\ parsers.py“,第440行,位于_read解析器= TextFileReader(filepath_or_buffer,** kwds)文件“ C:\\ Users \\ Marco \\ Anaconda3 \\ envs \\ entornotensor \\ lib \\ site-packages \\ pandas \\ io \\ parsers”中。 py”,第787行, init self._make_engine(self.engine)文件“ C:\\ Users \\ Marco \\ Anaconda3 \\ envs \\ entornotensor \\ lib \\ site-packages \\ pandas \\ io \\ parsers.py”,第1014行,在_make_engine self._engine = CParserWrapper(self.f,** self.options)文件“ C:\\ Users \\ Marco \\ Anaconda3 \\ envs \\ entornotensor \\ lib \\ site-packages \\ pandas \\ io \\ parsers.py”,第1708行,在初始化 self._reader = parsers.TextReader(src,** kwds)中,文件“ pandas_libs \\ parsers.pyx”,第384行,在pandas._libs.parsers.TextReader中。 CINIT文件“pandas_libs \\ parsers.pyx”,线路695,在pandas._libs.parsers.TextReader._setup_parser_source FileNotFoundError:文件b'data.csv”不存在

但是它确实存在,当我从Web API运行它时就会发生这种情况。

一些额外的信息:bat文件需要很长时间才能运行python脚本。 但是脚本本身可以立即运行。 data.csv文件是通过代码生成的,并且可以正确生成。 可能是由于文件写入时间太长而批处理文件在写入data.csv之前运行了吗? 我在另一个项目中进行了一些测试,但data.csv是即时编写的。

在此先感谢您:编辑:我刚刚检查过调试,甚至在线程休眠的情况下,data.csv的构建时间也不会太长。 IIS控制台只是不允许python脚本读取data.csv文件

您是否尝试过更改网站在IIS中使用的帐户? 因为如果使用networkservice帐户,则可能是权限问题。

我发现了问题所在。 当我在环境之外运行脚本时,并且从Process类调用解释器时,脚本无法知道什么是工作文件夹。 它假定它是解释器所在的位置。 解决方案非常简单,只需在脚本中添加路径即可。 像这样的东西:

q = pd.read_csv('D:\\AIASSETS\\data.csv')

并且无论您使用文件的位置,添加“ D:\\ AIASSETS \\”,或者更好地说无论您的工作文件夹是什么。 即使在您的模型中或正在编写文件时也是如此。 我不是要在python上措辞,但我相信也有一种方法可以通过代码设置工作文件夹,这也可能起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM