我正在尝试运行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文件
答案 0 :(得分:0)
您是否尝试过更改网站在IIS中使用的帐户?如果使用网络服务帐户,可能会导致权限问题。
答案 1 :(得分:0)
我发现了问题所在。 当我在环境之外运行脚本时,并且从Process类调用解释器时,脚本无法知道什么是工作文件夹。它假定它是解释器所在的位置。解决方案非常简单,只需在脚本中添加路径即可。 像这样的东西:
q = pd.read_csv('D:\\AIASSETS\\data.csv')
在任何使用文件的位置添加“ D:\ AIASSETS \”或更好地说无论您的工作文件夹是什么。 即使在您的模型中或正在编写文件时也是如此。 我不打算在python上措辞,但我相信也有一种方法可以通过代码设置工作文件夹,这也许也可以。