gpt4 book ai didi

python - pydrive:尝试将文件从远程服务器上传到 Google Drive

转载 作者:行者123 更新时间:2023-12-04 18:44:25 24 4
gpt4 key购买 nike

我正在尝试使用从(Ubuntu)服务器远程工作的python脚本自动将文件上传到谷歌驱动器。

在我的代码中,我有以下来自 Pydrive 的简单行:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)

file = drive.CreateFile({"parents": [{"kind": "<directory_name>","id": "<directory_id>"}]})
file.SetContentFile('<file_name>')
file.Upload()

我的 python 目录中有一个 setting.yaml 文件,以便脚本可以在第一次手动身份验证后自动进行身份验证,还有一个 client_secrets.json。我基本上遵循了 https://pythonhosted.org/PyDrive/oauth.html中的所有步骤.

但是,当我在远程 Ubuntu 服务器上激活我的脚本时,我会连接到终端环境中的一个谷歌页面,询问我的电子邮件地址和密码。当我输入这些时,谷歌会要求进行第二次身份验证:要么查看带有代码的图像(终端上什么都没有显示),要么“听并输入你听到的数字”。当我输入该命令时,终端回复“未找到”,我听不到任何声音(见下图)。

enter image description here

我被卡住了,我不知道如何解决这个问题。不幸的是,我至少需要进行一次身份验证,然后脚本将自动进行身份验证。我真的不知道如何跳过这一步。

任何想法/评论/见解将不胜感激

太感谢了
贝尔蒂

最佳答案

如文档中所述:

You can also use CommandLineAuth() which manually takes code from user at command line.


LocalWebserverAuth()将在 localhost:8080 上生成本地网络服务器监听(默认情况下),并尝试在用户的网络浏览器上打开身份验证 URL。打开的页面将在身份验证后将身份验证代码传送到在 localhost 上运行的本地服务器。

这里的问题是在远程服务器上运行此代码无法在本地计算机的浏览器中打开链接,因此您无法登录。

使用 CommandLineAuth()将改为在远程服务器的终端上打印一个 URL,您可以在本地浏览器中打开它。然后,您在浏览器中进行身份验证,它会为您提供身份验证代码,您需要从本地浏览器复制并粘贴到终端的提示中。

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.CommandLineAuth() # <--
drive = GoogleDrive(gauth)

file = drive.CreateFile({"parents": [{"kind": "<directory_name>","id": "<directory_id>"}]})
file.SetContentFile('<file_name>')
file.Upload()

如果您想自动区分本地和远程机器以选择身份验证方法,我建议您查看以下问题:
  • how to check if python script is being called remotely via ssh
  • Python webbrowser - Check if browser is available (nothing happens when opening webpage over an SSH connection)
  • 关于python - pydrive:尝试将文件从远程服务器上传到 Google Drive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58589734/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com