【问题标题】:Running a python script saved in local machine from google sheets on a button press按下按钮从谷歌表运行保存在本地机器中的python脚本
【发布时间】:2021-03-16 12:39:12
【问题描述】:

我正在尝试创建 Jira 问题,数据填充在 google sheet 中的一行中,我计划放置一个按钮来读取行的内容并创建 Jira 问题,我认为 Jira API 为它编写了脚本并且还可以使用 Google 表格 API 来读取要放入 Jira API 的行值。

如何以简单的方式将按钮链接到本地​​机器中的 python 脚本,我在这里遇到了其他类似的问题,但它们已经很老了,希望现在可以使用一些新的方法。

请帮助我以简单的方式实现这一点,非常感谢任何帮助。

谢谢你,保持安全。

【问题讨论】:

  • 您可以从 Internet 调用您的 Jira API 吗?如果是这样,Apps Script 提供了一个 UrlFetch 服务,可用于从工作表调用 Jira API。如果没有,您可以在本地计算机上构建一个按钮来提取电子表格数据(通过 Drive 或 Sheets API)并推送到 Jira。但是你需要从你的机器上触发它; Google 将无权在您的计算机上远程执行代码。
  • 澄清一下,您有一个 Python 脚本,它通过 Google Sheets API 读取您的 Google Sheet,然后通过 Jira API 创建 Jira 任务?

标签: python google-sheets google-sheets-api


【解决方案1】:

Google 表格无法在您的本地计算机上运行代码。这意味着您有几个选择:

本地点击按钮

您可以从命令行自己运行脚本,而不是单击 google sheet 上的按钮。这可能是您测试它的方式,而不是您想要的。

观看电子表格

您可以让您的 python 脚本设置每隔几分钟运行一次。这样做的好处是设置非常简单(google for cron jobs),但没有按钮,更新速度可能会更慢。此外,如果您关闭计算机,它也会停止工作。

使脚本可用于远程执行

您可以这样做,以便您的脚本可以远程运行,但它需要额外的工作。您可以购买一个网站域,并将其指向您的计算机(使用动态 dns),然后让谷歌表请求您的新网址。这是很多工作,而且需要真金白银。这可能不是最好的方法

将脚本移至云端

这可能就是您想要的:让您的机器脱离循环。您可以使用 Google AppScripts,并在那里重写您的 jira 代码。然后,您可以将 google AppScript 配置为在单击按钮时运行。

【讨论】:

    【解决方案2】:

    不幸的是,您确实无法在 Google 表格中按下按钮来启动本地 Python 脚本——Google 表格/您的浏览器无法以这种方式访问​​您的本地文件和程序。

    可以创建一个运行Google Apps Script (GAS) 的按钮。这是一些基于 JavaScript 的代码,附加到电子表格,由 Google 托管/运行。 Here's 按键运行教程。

    如果您可以将脚本移植到 GAS 中,这是一种解决方案。

    如果你想将脚本保留在 Python 中,你基本上需要部署它,然后使用 GAS 调用你的 Python 脚本。我能想到的最简单的方法(不是超级简单,但完全可行!)如下:

    1.将您的 Python 脚本变成 API。

    使用FlaskFastAPI 之类的东西来设置您自己的API。目的是当访问某个 URL 时,它将触发您的 Python 程序运行一个完成所有工作的函数。使用 FastAPI,它可能看起来像这样:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    def main():
        print("Access Google Sheet via API...")
        # your code here
    
        print("Upload to JIRA via API...")
        # your code here
    
    
    @app.get("/")
    def root():
        main()
        return {"message": "Done"}
    

    这里,“/”是 API 端点。当您访问(或发出“获取”请求)到已部署应用程序的 URL 时,只需以“/”结尾,root 函数将被调用,它会调用您的 main 函数。 (您可以设置不同的 URL 结尾来做不同的事情)。

    我们可以在本地进行测试。如果您按照 FastAPI 的设置说明进行操作,您应该能够运行命令 uvicorn main:app --reload,它会在 http://127.0.0.1:8000 启动服务器。如果您在浏览器中访问该 URL,脚本应该会运行,并且“完成”消息应该会出现在您的浏览器中。

    2。部署您的 Python 应用

    有许多服务可以托管您的 Python 程序,例如 HerokuGoogle Cloud。他们可能会提供免费试用,但这通常需要花钱。 FastAPI 有关于 deploying to Deta 的说明,目前似乎有免费套餐。

    当您的应用是应用并正在运行时,应该有一个关联的网址,例如“https://1kip8d.deta.dev/”。如果您在浏览器中访问它,它将运行您的脚本并返回“完成”消息。

    3.使用 GAS 从 Google 表格中访问您的 Python API

    最后一步是使用 GAS “点击”该 URL,而不是在浏览器中手动访问它。在tutorial mentioned above 之后,创建一个链接到您的电子表格的 GAS 脚本,以及一个“分配”给您的脚本的按钮。脚本将如下所示:

    function myFunction() {
      var response = UrlFetchApp.fetch("https://1kip8d.deta.dev/");
      Logger.log(response.getContentText());
    }
    

    现在,只要您按下按钮,GAS 就会访问该 URL,这将导致您的 Python 脚本执行。

    【讨论】:

      【解决方案3】:

      您可能想查看Google Colaboratory。它是 Google 提供的一项服务,可以托管您的 Python 代码(称为“笔记本”),连接您的 Google Drive(和其他 Google 服务),并调用 Web 端点(这将是您的 Jenkins 服务器)。我想这就是你在这里处理的三个部分。

      为了清楚起见...您的代码将不再是本地代码(如果这对您真的很重要)。相反,它将由谷歌托管。笔记本会保存到您的 Google 云端硬盘帐户中,因此您可以获得所提供的安全性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-15
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 2012-06-27
        相关资源
        最近更新 更多