[英]Python Flask with Waitress server cannot run, when making it as a Windows service
我用Flask构建了一个Python应用程序并使用Waitress服务器运行。
该应用程序使用本地.csv文件作为输入数据。
它可以在命令行运行时运行良好。 (即python webserver.py),我可以加载csv来读取数据,上传(覆盖)csv文件。
但是当我将它添加为窗口服务(使用nssm或Window Resource Kit)时,我的应用程序可以运行,但csv文件只能由JS加载,而不能由python加载。
这意味着,在服务模式下,如果我使用js加载csv,没关系,但是当加载或上传文件时(使用python脚本)它返回“内部服务器错误”。
我的问题是,如何通过命令行运行并添加Window的服务不同? 如何将python脚本作为服务使用csv文件?
任何帮助表示赞赏。 非常感谢。
这是上传代码。
@app.route('/uploadss', methods = ['GET', 'POST'])
def upload():
import os
print(request.files['file'])
if request.method=='POST':
file = request.files['file']
filenames = ['temperature.csv','inlet_clean_info.csv','log_data.csv','medium-term-temperature.csv']
if file.filename in filenames:
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
return 'file uploaded successfully'
else:
return 'filename is not acceptable'
我已经将服务员网络服务器添加为服务:
> -(nssm) nssm.exe install MyService. Then add python path and the executed python file.
> -(Window ResKit) instsrv.exe LNG c:\reskit\srvany.exe. Then add "Parameter" key in Regedit, add "Application" String to point to <python path> <executed path>
在这两种情况下,它都会返回“内部服务器错误”
这是错误消息,即返回的响应
“ 500内部服务器错误
内部服务器错误
服务器遇到内部错误,无法完成您的请求。 服务器过载或应用程序中存在错误。
“
将应用程序作为服务运行时的主要区别在于环境。
有些事情具体:
服务运行的用户是哪个。
当您从命令行启动它时,它可能作为您的用户帐户运行。 您的用户帐户可能具有Windows系统帐户的不同权限。 这往往会导致访问文件的问题,例如,打开HTTP服务器的端口。 可能存在其他与权限相关的问题。
环境变量,包括PATH。
当你在命令shell中时,windows有一个PATH变量,告诉它在哪里查找可执行文件。 因此,如果您键入python
它会在当前文件夹中查找python.exe
,然后搜索PATH变量,直到找到python.exe
您还可以定义其他可以定义的环境变量,例如TMP(临时文件夹)等。
当它作为服务运行时,它通常在不同的用户上下文中运行,这将具有不同的环境变量,%TMP%和PATH。 所以可能发生的一件事是它正在尝试运行python.exe
但是服务用户的路径上没有python.exe
。
HKCU注册表入口
如果您的应用使用注册表并使用HKEY_CURRENT_USER树,则当它作为服务运行时可能会有所不同。 (HKEY_CURRENT_MACHINE可能相同)。
应用程序启动的文件夹
从命令行运行它时,通常在当前文件夹中启动它。 这意味着可以使用相对路径(例如.\\images
)而不是绝对路径( c:\\website\\images
)。
如果您要更改为其他文件夹,则.\\images
版本可能无法正常工作。
当程序作为服务运行时,它通常似乎从C:\\Windows\\System32
因此,您可以调查使用绝对路径是否有效。 或者您可以调查是否有指定启动文件夹的方法。
要检查的另一件事(可能是第一件事) - 查找日志文件
通常,Web服务器会在某处的服务器上写入日志文件。
500错误将发送给用户,但是会有更详细的错误写入日志。 因此,找到该日志文件应该在哪里并检查它。 (它可能不在它应该的位置,这可能与服务运行的用户相关的权限有关)。 如果它存在,它可能有助于追踪特定问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.