从ASP.NET使用批处理文件调用Python(anaconda)
我正在尝试从我的asp.net web应用程序调用python脚本。我正在使用批处理文件调用python脚本。在服务器上运行批处理文件时,python脚本将从该批处理文件运行。当我尝试从asp.net调用批处理文件时,批处理文件中的代码会一直工作到调用python为止,而对python脚本的调用则不起作用 这是我的批处理文件:从ASP.NET使用批处理文件调用Python(anaconda),python,asp.net,batch-file,Python,Asp.net,Batch File,我正在尝试从我的asp.net web应用程序调用python脚本。我正在使用批处理文件调用python脚本。在服务器上运行批处理文件时,python脚本将从该批处理文件运行。当我尝试从asp.net调用批处理文件时,批处理文件中的代码会一直工作到调用python为止,而对python脚本的调用则不起作用 这是我的批处理文件: ( echo Hello ) C:\inetpub\Sites\**\**\**\test.txt rem the code above works from ASP
(
echo Hello
)
C:\inetpub\Sites\**\**\**\test.txt
rem the code above works from ASP.NET
rem this code is never called
set CONDAPATH="C:\\Users\\***\\Anaconda3"
set ENVNAME="base"
if %ENVNAME%==base (set ENVPATH=%CONDAPATH%) else (set ENVPATH=%CONDAPATH%\envs\%ENVNAME%)
call %CONDAPATH%\Scripts\activate.bat %ENVPATH%
C:\\Users\\***\\Anaconda3\\python.exe C:\\inetpub\\Sites\\**\\***\\testfolder\\try_py.py
有人能帮我找出调用此python代码的错误吗?您需要了解的第一件事是您的行:
C:\inetpub\Sites\***\***\***\test.txt
将在默认应用程序中打开一个文本文件,然后脚本将等待您关闭该文本文件,然后再继续下一行。如果希望代码在不等待文本文件关闭的情况下继续,可以使用start
命令:
Start”““C:\inetpub\Sites\***\***\***\test.txt”
这里有一个快速的例子来演示我之前的评论,关于定义变量的推荐语法,以及在文件路径周围使用双引号
Set“CONDAPATH=%UserProfile%\Anaconda3”
设置“ENVNAME=base”
如果/I“%ENVNAME%”==“base”(设置“ENVPATH=%CONDAPATH%”),则设置“ENVPATH=%CONDAPATH%\envs\%ENVNAME%”
调用“%CONDAPATH%\Scripts\activate.bat”%ENVPATH%
%CONDAPATH%\python.exe“C:\\inetpub\\Sites\\***\\***\\testfolder\\try\u py.py”
总而言之:
@Echo关闭
回声你好
启动“”“C:\inetpub\Sites\***\***\***\test.txt”
设置“CONDAPATH=%UserProfile%\Anaconda3”
设置“ENVNAME=base”
如果/I“%ENVNAME%”==“base”(设置“ENVPATH=%CONDAPATH%”),则设置“ENVPATH=%CONDAPATH%\envs\%ENVNAME%”
调用“%CONDAPATH%\Scripts\activate.bat”%ENVPATH%
%CONDAPATH%\python.exe“C:\\inetpub\\Sites\\***\\***\\testfolder\\try\u py.py”
如果不希望脚本等待python命令完成(例如,如果这是脚本的最后一行),可以将最后一行更改为:
Start”“%CONDAPATH%\python.exe”“C:\\inetpub\\Sites\\***\***\\testfolder\\try\u py.py”
我想出来了,以防有人像我一样仍在使用asp.net。我从CONDAPATH=“C:\Users\***\Anaconda3”调用python脚本时遇到的所有问题都是我文件夹上的权限问题
这个链接给了我提示:
ENVNAME
不等于base
,它等于“base”
。您应该学习使用推荐的语法来定义变量,并在文件路径周围使用双引号。推荐的语法是set“varname=valstring”
。非常感谢您帮助清理该语法。我做了那些改变。当我从该服务器上的cmd行调用该批处理文件时,它就会工作。但是,当我尝试在asp.net代码中调用它时,hello会写入test.txt,因此我知道asp.net正在调用批处理脚本。asp.net不喜欢调用来执行python脚本。有什么想法吗?嗯@SuziKing,也许你使用的路径等就是问题所在。因为我不知道,所以我不能帮你解决这个问题。据我所知,最终用户\Scripts\activate.bat
或python.exe
目录实际上是%LocalAppData%\Continuum\Anaconda3
,或%ProgramData%\Anaconda3
。这些都不是我上面的脚本的问题(发布的目的是向您展示正确的语法),它们只与您提供的信息相关。我也不知道是否可以从ASP.NET运行这些可执行文件,因为我不使用它,也不会因为在Windows上安装python而破坏它!