将带有服务员服务器的Python Flask设置为Windows服务时无法运行
我用Flask构建了一个Python应用程序,并使用waiteress服务器运行 该应用程序使用本地.csv文件作为输入数据 通过命令行运行可以很好地运行。(即pythonwebserver.py),我可以加载csv来读取数据,上传(覆盖)csv文件 但当我将其添加为窗口服务(使用nssm或窗口资源工具包)时,我的应用程序可以运行,但csv文件只能由JS加载,不能由python加载 这意味着,在服务模式下,如果我使用js加载csv,就可以了,但当加载或上载文件(使用python脚本)时,它会返回“内部服务器错误” 我的问题是,通过命令行运行和添加为Windows的服务有何不同?如何使python脚本在作为服务时与csv文件一起工作 感谢您的帮助。非常感谢你 这是上传代码将带有服务员服务器的Python Flask设置为Windows服务时无法运行,python,flask,service,window,Python,Flask,Service,Window,我用Flask构建了一个Python应用程序,并使用waiteress服务器运行 该应用程序使用本地.csv文件作为输入数据 通过命令行运行可以很好地运行。(即pythonwebserver.py),我可以加载csv来读取数据,上传(覆盖)csv文件 但当我将其添加为窗口服务(使用nssm或窗口资源工具包)时,我的应用程序可以运行,但csv文件只能由JS加载,不能由python加载 这意味着,在服务模式下,如果我使用js加载csv,就可以了,但当加载或上载文件(使用python脚本)时,它会返回
@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'
我还添加了女服务员Web服务器作为服务,包括:
> -(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>
-(nssm)nssm.exe安装MyService。然后添加python路径和执行的python文件。
>-(窗口ResKit)instsrv.exe LNG c:\ResKit\srvany.exe。然后在Regedit中添加“Parameter”键,添加指向的“Application”字符串
在这两种情况下,它都返回“内部服务器错误”
这是错误消息,返回的响应
“500
内部服务器错误内部服务器错误
服务器遇到内部错误,无法完成您的操作
请求。要么服务器过载,要么服务器中存在错误
应用程序。“
将应用程序作为服务运行时的主要区别在于环境 具体来说: 运行服务的用户。
当您从命令行启动它时,它很可能作为您的用户帐户运行。您的用户帐户可能与Windows系统帐户具有不同的权限。这往往会导致访问文件的问题,而不仅仅是打开HTTP服务器的端口。可能存在其他与权限相关的问题 环境变量,包括路径。
当您在命令shell中时,windows有一个PATH变量,告诉它在哪里查找可执行文件。因此,如果键入
python
它将在当前文件夹中查找python.exe
,然后它将搜索PATH变量,直到找到python.exe
您还可以定义其他环境变量,如TMP(临时文件夹)等
当它作为服务运行时,它通常在不同的用户上下文中运行,这将有不同的环境变量,包括%TMP%和路径。因此,可能发生的一件事是,它试图运行python.exe
,但服务用户的路径上没有python.exe
HKCU注册条目如果您的应用程序使用注册表,并使用HKEY_CURRENT_用户树,则当它作为服务运行时,情况可能会有所不同。(HKEY_当前的_机器可能相同) 应用程序启动所在的文件夹
从命令行运行它时,通常在当前文件夹中启动它。这意味着可以使用相对路径(例如
\images
)而不是绝对路径(c:\website\images
)
如果要更改到其他文件夹,则\images
版本可能无法工作
当一个程序作为服务运行时,它通常似乎在C:\Windows\System32
因此,您可以调查使用绝对路径是否有效。或者,您可以调查是否有办法指定启动文件夹
要检查的另一件事(可能首先)-查找日志文件
通常web服务器会在服务器的某个位置写入日志文件
500错误将发送给用户,但会有更详细的错误写入日志。所以,找到日志文件应该在哪里并检查它。(它可能不在它应该在的位置,这可能与服务运行的用户的相关权限有关)。如果有,可能有助于追踪特定问题。非常感谢。你的回答让我相信这是关于启动文件夹的。的确如此。将启动文件夹设置为源代码文件夹解决了此问题。(nssm的startup directory参数)再次感谢您,您救了我一天。@LeoLucas如果答案正确,您应该接受它。