【问题标题】:How to run an exe file in google cloud function?如何在谷歌云功能中运行exe文件?
【发布时间】:2021-05-19 09:24:08
【问题描述】:

我的本​​地机器上有一个 Windows 可执行文件 (net_audio_client.exe)。当我在我的 pycharm IDE 上运行以下 python 代码时,它工作正常。

def hello_world(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:
        print(subprocess.Popen("net_audio_client -user xxx -pass xxx -mac macaddr", shell=True,
                               stdout=subprocess.PIPE).stdout.read())
        return f'Hello World!'

当我将其压缩并上传到谷歌云功能时,相同的代码不起作用。我收到以下错误:

/bin/sh: 1: net_audio_client: not found

我遵循的堆栈问题:

  1. How to load local assets within a GCP cloud function?
  2. How to run a subprocess inside Google Cloud Function?

谢谢

【问题讨论】:

  • 错误显示/bin/sh,这意味着它使用的是Linux,而不是Windows,所以.exe可能不起作用。顺便说一句:它搜索net_audio_client 而不搜索.exe,Linux 将net_audio_clientnet_audio_client.exe 视为两个不同的程序。
  • 我想知道net_audio_client 在做什么以及-mac macaddr 可能意味着什么 - 如果它是 MAC 地址,那么它可能只在本地网络中有效。在服务器上,它可能使用云网络中的 MAC 地址,而不是您的本地网络。
  • 我有一个适用于 Linux 和 Windows 的可执行文件。我已经将它们都压缩并上传了。我也尝试过上传单个可执行文件。 mac是mac地址。这是一个远程硬编码的 MAC 地址。如果我在任何带有 exe 文件的 Windows 笔记本电脑中运行相同的程序,这将有效。但同样不适用于云功能。
  • 您是否尝试在代码/full/path/to/net_audio_client 中使用?系统可能不知道这里是net_audio_client。如果它与代码在同一个文件夹中,那么您可以尝试 dot 从当前文件夹运行程序 - ./net_audio_client
  • @furas 我删除了 .exe 文件,只保留了 Linux 可执行文件。与./net_audio_client 合作。谢谢。我删除了

标签: python google-cloud-platform google-cloud-functions


【解决方案1】:

Cloud Functions、Cloud Run 和 App Engine 仅支持 Linux 运行时。您不能在它们上运行 Windows 二进制文件。

如果您想使用容器和 Windows 二进制文件,可以使用 Windows 部署 GKE 集群。或者直接使用 Compute Engine。

【讨论】:

  • 对。我删除了 windows exe 文件并将其替换为 Linux 二进制文件并更正了 ./net_audio_client 的路径。但是,它在 Windows 上与 net_audio_client 一起使用。
  • @theone1one 当您在 Windows 上运行 net_audio_client 时,系统首先搜索 net_audio_client.exenet_audio_client.batnet_audio_client.cmd 等,然后运行第一个匹配文件。 Windows 有它必须检查的扩展列表。 Linux 和 Windows 也有他们必须在其中搜索可执行文件的文件夹列表 - Windows 可能在此列表中有当前文件夹。 Linux 没有它——可能是出于安全原因——但如果你将. 添加到PATH,那么它也会运行当前文件夹中的程序。
  • 如果您想在受控的运行时环境中运行二进制文件,请选择 Cloud Run 而不是 Cloud Functions。
猜你喜欢
  • 2020-04-05
  • 2019-03-16
  • 2017-11-14
  • 2017-11-10
  • 2019-09-19
  • 1970-01-01
  • 2019-03-19
  • 2020-10-14
  • 2020-10-03
相关资源
最近更新 更多