从 Google 云函数中调用 shell 脚本

Call shell script from within Google Cloud function

我正在尝试使用 Python 在 Google 云函数中调用一个简单的 shell 脚本。 但是,由于某种原因,即使我发现它在环境中的同一目录中,也找不到该脚本。

我的main.py的脚本如下所示:

import subprocess
import os

def reload_plm(request):
    request_json = request.get_json()
    if request.args and 'message' in request.args:
        return request.args.get('message')
    elif request_json and 'message' in request_json:
        return request_json['message']
    else:
        files = [f for f in os.listdir(os.getcwd()) if os.path.isfile(f)]
        print(os.getcwd()) # output: /workspace
        print(files) # output: ['gettoken.sh', 'k.key', 'main.py', 'requirements.txt']
        load_token()
        return f'Hello World!'


def load_token():
    output = subprocess.call(["/workspace/gettoken.sh","k.key","argument1", "argument2"])
    print(output)

如您所见,在相对路径不起作用后,我什至尝试使用脚本的绝对路径,但结果相同:

FileNotFoundError: [Errno 2] No such file or directory: '/workspace/gettoken.sh'

FileNotFoundError: [Errno 2] No such file or directory: './gettoken.sh'

我在本地测试了脚本,它确实有效。我在这里做错了什么?

编辑: 正如 Kolban 所指出的,不应该假定存在某种 OS 环境。但是,如果您发现自己在 Linux 上,则此方法有效:

解决方法:找到原因了。这是因为我在脚本中使用了 #!/bin/sh 而不是 bash。显然这个 shebang 导致只评估 PATH 而不是当前目录。我通过将命令修改为 . ./gettoken.sh

解决了这个问题

我们的想法是,也许我们想避免从 Cloud Functions 环境中调用 shell 脚本。 Cloud Functions 的概念是为您提供一个可以执行您的编程语言函数的环境。从内部执行 shell 脚本会做出假设,包括“运行ning in Linux/Unix”、“能够派生一个额外的进程”、“运行 脚本的权限”、“那里是一个 shell 二进制甚至 运行”。我建议如果您想拥有环境,请查看 Cloud 运行.