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

时间:2018-11-10 23:34:28

标签: c# python batch-file

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

让我给你看一些代码 运行蝙蝠文件

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

蝙蝠文件

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

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

  

回溯(最近通话最近):     在第13行的文件“ D:\ AIASSETS \ AI.py”       q = pd.read_csv('data.csv')     在parser_f中的第678行,文件“ C:\ Users \ Marco \ Anaconda3 \ envs \ entornotensor \ lib \ site-packages \ pandas \ io \ parsers.py”       返回_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)      init 中的文件“ C:\ Users \ Marco \ Anaconda3 \ envs \ entornotensor \ lib \ site-packages \ pandas \ io \ parsers.py”,第787行       self._make_engine(self.engine)     _make_engine中的文件“ C:\ Users \ Marco \ Anaconda3 \ envs \ entornotensor \ lib \ site-packages \ pandas \ io \ parsers.py”,行1014       self._engine = CParserWrapper(self.f,** self.options)      init 中的文件“ C:\ Users \ Marco \ Anaconda3 \ envs \ entornotensor \ lib \ site-packages \ pandas \ io \ parsers.py”,行1708       self._reader = parsers.TextReader(src,** kwds)     在pandas._libs.parsers.TextReader中,文件“ pandas_libs \ parsers.pyx”,第384行。初始化     在pandas._libs.parsers.TextReader._setup_parser_source中的文件“ pandas_libs \ parsers.pyx”,行695   FileNotFoundError:文件b'data.csv'不存在

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

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

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

2 个答案:

答案 0 :(得分:0)

您是否尝试过更改网站在IIS中使用的帐户?如果使用网络服务帐户,可能会导致权限问题。

答案 1 :(得分:0)

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

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

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