如何在Web服务器上运行Python脚本

时间:2017-06-19 21:54:28

标签: python web-applications scripting cgi aws-lambda

我使用的是一个webapp,可以生成存储在应用程序中的一些数据的PDF报告。但是,要获得该报告,需要多次点击并对应用程序进行整理。

我支持此应用的一组用户(我们使用该应用,我们不会创建该应用),我希望他们只需点击几下即可生成和查看此报告可能。值得庆幸的是,这个Web应用程序通过RESTful API提供了大量数据。所以我做了一些脚本。

我有一个Python脚本,它发出HTTP GET请求,处理JSON结果,并使用结果数据动态构建URL。这是我的python代码的简化版本:

#!/usr/bin/env python
import requests

app_id="12345"
secret="67890"
api_url='https://api.webapp.example/some_endpoint'

resp = requests.get(api_url, auth=(app_id,secret))
json_data = resp.json()

# Simplification of the data processing I'm doing
my_data = json_data['attr1']['attr2'] + my_data_processing

# Result of the script is a link to a dynamically generated PDF
pdf_url = 'https://pdf.webapp.example/items/' + my_data

以上是我实际拥有的代码的简化,但它显示了相关的要点。在我的实际脚本中,我继续使用动态构建的URL执行另一个GET。 webapp根据URL的my_data部分生成PDF,然后将该PDF写入文件。今天效果非常好。

目前,这是一个按需在我的本地计算机上运行的python脚本。但是,我希望在网络上的某个位置托管此功能,以便当用户点击其浏览器中的网址时,它会运行并生成pdf_url,而不必在每个用户上安装此脚本'本地计算机,以便可以在移动设备上生成和查看PDF。

想法是用户可以打开http://example.com/report-shortcut,python脚本将运行服务器端,动态构建URL,并将用户重定向到该URL,然后在浏览器中显示PDF(假设用户正在使用显示Chrome,Safari等PDF的浏览器。或者,如果重定向有问题,转到http://example.com/report-shortcut只能显示一个HTML页面,其中包含指向Python脚本生成的URL的链接。

我正在寻找有关如何托管此Python脚本的解决方案,并在用户访问网页时运行该脚本。我已经研究过AWS Lambda和Django,但对于这样一个简单的脚本(约20行代码,加上注释和空格)来说,这两者似乎都有些过分。我也看过Python CGI脚本,看起来很有前景,但我没有经验设置类似的东西。

在用户转到示例网址时,寻找有关如何最好地托管和运行此代码的建议。

PS:我考虑过只是在Javascript中重新实现,但我认为API密钥不能公开访问。

1 个答案:

答案 0 :(得分:0)

我建议在AWS Lambda中构建脚本并使用API​​网关来调用它。

您可以创建pdf,将其存储在S3中并生成预签名的URL。然后向用户返回响应302以将它们重定向到预先签名的URL。这将在其浏览器中显示PDF。 非常快速地设置和使用Boto3将PDF转换为S3并生成URL很简单。

这比你的其他一些建议简单得多。

参见API Gateway &安培; Boto3