python - 在 Azure Function 内执行任意 Python 代码(用户提交)

标签 python azure azure-functions

我正在尝试运行一个允许用户执行任意代码的示例函数

注意:我假设这没问题,因为 Azure Functions 默认情况下会提供沙箱。(最终用户需要使用数据帧、对象等编写代码。我已经研究过 pypy.org,但没有我认为我需要它,因为我不担心将其用作垃圾邮件机器人或其他东西的攻击):

import os
import json
import ast
print('==============in python function========================')
postreqdata = json.loads(open(os.environ['req']).read())
response = open(os.environ['res'], 'w')
response.write("hello world from "+postreqdata['name'])
response.close()
logic = (postreqdata['logic'])
eval(logic)

但我不断收到以下输出/错误:

   2018-01-17T09:09:08.949 ==============in python function========================
2018-01-17T09:09:09.207 Exception while executing function: Functions.ccfinopsRunModel. Microsoft.Azure.WebJobs.Script: Traceback (most recent call last):
  File "D:\home\site\wwwroot\ccfinopsRunModel\run.py", line 12, in <module>
    eval(logic)
  File "<string>", line 1
    print('code sent from client')
        ^
SyntaxError: invalid syntax
.

我的 POST 请求正文包含以下内容:

{
    "name": "Python Function App",
    "logic": "print('code sent from client')"
}

因此,正在读入“logic”变量,并且 eval() 尝试将字符串解释为 python 代码,但它导致了语法错误,但似乎没有语法错误。

我做错了什么?如果对“eval”有限制,我假设它会说“语法错误”,而不是“语法错误”

感谢您提供的任何帮助!

最佳答案

使用 exec 运行您的代码。 eval 用于计算表达式。

logic = (postreqdata['logic'])
exec(logic)

也可以尝试将代码作为多行字符串发送,如下所示,

>>> s = '''
for i in range(3):
    print("i")
'''
>>> exec(s)
0
1
2

关于python - 在 Azure Function 内执行任意 Python 代码(用户提交),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48295600/

相关文章:

mysql - 访问 Azure MySQL 服务

azure - Terraform Azure 将 VM 配置到现有子网/vnet/资源组

azure - 我可以使用 azure cli 触发发布管道吗

c# - Azure函数2依赖注入(inject)抛出错误

python - 我想要一个 turtle 图形中的弹跳球在墙上,但它们停下来,它们徘徊并发送错误

python - 获取多维数组中的最大子集

python - Google Apps Engine 本地主机加载速度极其缓慢

python - Flask Upload 如何配置文件存储路径

java - 这需要 dotnet cli 位于路径上。确保安装 .NET Core SDK 2.0 https ://www. microsoft.com/net/core eclipse azure 函数错误

c# - Azure 函数 TimerTrigger 仅运行一次