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 ??

Google Cloud Functions 部署问题

如何从 Cloud Functions 连接 Google Cloud SQL?

Google Cloud Functions 通知 iOS

Google Cloud Functions Cron 作业不工作

在本地测试 Python Google Cloud Functions