首页 > 解决方案 > Google Cloud 函数中的 Python 代码未显示所需的输出

问题描述

我有以下几行python代码

import os
def hello_world():
  r=os.system("curl ipinfo.io/ip")
  print (r)
hello_world()

从命令行执行时显示所需的输出,但输出Google Cloud Shell末尾似乎有 0IP Address

 $ python3 main2.py
   34.X.X.2490

当我在其中部署相同的代码时,输Google CLoud function​​出显示 OK

我必须按如下方式替换第一行代码GCF以使其部署。

   def hello_world(self):

有什么建议可以GCF显示所需的输出,即curl命令的输出吗?

标签: google-cloud-functionspython-3.7

解决方案


您的功能无法正常工作有两个原因:

  1. 首先,您不尊重HTTP Cloud Function Python 函数签名
def hello_world(request):
  ....
  1. 其次,您不能使用系统调用。实际上不完全是,您可以执行系统调用,但是,因为您不知道安装了哪些包/二进制文件,所以您不能依赖它。它是无服务器的,您无需管理底层基础架构和运行时环境。

在这里,您假设 CURL 安装在运行时映像上。也许是,也许不是,也许是,也许将来会被删除!!你不能依赖它!!


如果要管理运行时环境,可以使用Cloud Run。你将管理你的运行时环境,你可以在上面安装你想要的东西,然后你就确定你能做什么。


最后备注:

注意:您可以对相同的 URL 执行 http get 请求来获取 IP,而不是执行 CURL

为什么要知道传出IP?它是无服务器的,您也无需管理网络。您将通过 Google IP 访问互联网。它可以随时更改,您的项目或其他人(如我)的项目中的其他云功能(或云运行)能够使用相同的 IP。这是 Google IP,不是您的!如果这是您的要求,请告诉我,有解决方案!


推荐阅读