gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:01:50 25 4
gpt4 key购买 nike

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

注意:我假设这没问题,因为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com