Google Cloud Functions - 为啥 GCF 将两个位置参数传递给我的函数?
Posted
技术标签:
【中文标题】Google Cloud Functions - 为啥 GCF 将两个位置参数传递给我的函数?【英文标题】:Google Cloud Functions - Why are two positional arguments passed into my function by GCF?Google Cloud Functions - 为什么 GCF 将两个位置参数传递给我的函数? 【发布时间】:2019-03-10 11:06:25 【问题描述】:我在 Python 3.7 上有一个不接受任何输入参数的 Google Cloud 函数。当我尝试运行它时,它会给出以下错误:
TypeError: google_cloud_function() takes 0 positional arguments but 2 were given
实际的函数代码如下所示(调用了不同的 bash 函数):
import subprocess
def google_cloud_function():
subprocess.call(["ls"], shell=True)
subprocess.call(["pwd"], shell=True)
为什么会这样?
【问题讨论】:
你能描述一下你的函数的定义吗?你是如何尝试运行它的? 我已将代码示例插入问题中。它由 GCS 存储桶上传触发。 requirements.txt 很好。 【参考方案1】:由 Cloud Storage 等触发的后台 Cloud Function 应具有以下函数签名:
def function(data, context):
...
即使您不使用参数,也需要包含它们。
【讨论】:
所以看起来所有的云函数都会有数据和上下文传递给它们。很高兴知道。干杯, 如果它们是后台触发器,是的。如果触发器是 HTTP 请求,它们将获得request
参数。
@DustinIngram 感谢您的帮助,但您能否提供一个完整的示例?我的函数是这样的: def deploy2():... my code... ,并且得到了与 Balkan 相同的错误。然后尝试了您的解决方案,但不知道是否正确,更改为此 def test2(data, context):,但开始出现错误:TypeError: test2() missing 1 required positional argument: 'context'
。有小费吗?为帮助干杯
@RafaelPaz 听起来您可能正在尝试部署由 HTTP 而不是由 GCS 事件触发的函数,在这种情况下,您需要像 def test2(request)
这样的函数签名。
非常感谢@DustinIngram 的回复。我试过了,但有其他问题,不想问太多,但如果你能帮我解决这个问题:***.com/questions/54938099/… 和serverfault.com/questions/956272/… 将不胜感激。看到您对 GCP 主题非常活跃,而且我很新。干杯队友以上是关于Google Cloud Functions - 为啥 GCF 将两个位置参数传递给我的函数?的主要内容,如果未能解决你的问题,请参考以下文章
? Google Cloud Functions ?????? MongoDB Atlas ??
如何从 Cloud Functions 连接 Google Cloud SQL?