Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ASP.NET使用批处理文件调用Python(anaconda)_Python_Asp.net_Batch File - Fatal编程技术网

从ASP.NET使用批处理文件调用Python(anaconda)

从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

我正在尝试从我的asp.net web应用程序调用python脚本。我正在使用批处理文件调用python脚本。在服务器上运行批处理文件时,python脚本将从该批处理文件运行。当我尝试从asp.net调用批处理文件时,批处理文件中的代码会一直工作到调用python为止,而对python脚本的调用则不起作用

这是我的批处理文件:

(
  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而破坏它!