我有尝试在天蓝色上发布的Flask网络应用。我在Web应用程序上部署了它,创建了新资源,下载了用户发布配置文件,并使用下载的文件从visual studio发布了它。一切都在localhost上顺利运行,但一旦发布即可获得错误:
- IIS收到了请求;但是,内部错误 在处理请求期间发生。这个的根本原因 错误取决于哪个模块处理请求以及什么是 发生此错误时发生在工作进程中。
- IIS无法访问该网站的web.config文件 或申请。如果设置了NTFS权限,则会发生这种情况 错误。
- IIS无法处理配置 网站或应用程序。
- 经过身份验证的用户没有 有权使用此DLL。
- 请求映射到a 托管处理程序,但.NET可扩展性功能不是 安装。
我几乎不知道这意味着什么。这是我发布的第一个网络,所以我很新手。
我的Views.py使用以下代码调用senna-win32.exe:
senna_path = os.path.join('senna\\senna-win32.exe')
p = subprocess.Popen(senna_path, stdout=subprocess.PIPE,stdin=subprocess.PIPE)
grep_stdout = p.communicate(input=bytes(va, 'utf-8'))[0]
inList = grep_stdout.decode()
inList = list(inList.splitlines())
我的本地主机似乎没有任何问题/错误,但不确定是什么意思。
答案 0 :(得分:2)
根据我的经验,有很多原因会导致像你这样的问题。
对于第一种情况,reqirements.txt
文件中所需的某些Python包未直接安装在Azure WebApp上。对于这种情况,您需要按照troubleshooting的官方摘要来解决它。或者,您甚至可以尝试按照我的解决方案为其他SO线程Publishing MVC app that uses python script来解决它。
但是,我认为您的问题可能是由于代码中的senna_path
不是Azure WebApp上的有效路径引起的。我试图创建一个简单的Python脚本,如下所示,使用Azure WebApp上的Kudu控制台测试代码,它可以通过命令python test.py > test.out.txt
正常工作。
import os
from subprocess import Popen, PIPE
path = os.path.join('senna-win32.exe')
p = Popen(path, stdin=PIPE, stdout=PIPE)
grep_stdout = p.communicate(input="happy time".encode('utf-8'))[0]
inList = grep_stdout.decode()
inList = list(inList.splitlines())
print inList
所以我的建议是尝试使用绝对路径D:\home\site\wwwroot\FlaskWebProject1\senna\senna-win32.exe
代替senna\senna-win32.exe
来解决问题。
任何更新,请随时告诉我。
答案 1 :(得分:0)
我遇到了同样的问题,在我的情况下,问题是缺少stderr的重定向,就像我的代码一样,我只重定向stdout + stdin。
添加stderr=PIPE
解决了我的问题。
process = Popen(exe_relative_path, stdin=PIPE, stdout=PIPE, stderr=PIPE)