pydrive:尝试将文件从远程服务器上传到 Google 驱动器

pydrive: trying to upload files to Google Drive from a remote server

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

在我的代码中,我有以下来自 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 服务器上激活我的脚本时,我会连接到终端环境中的 google 页面,询问我的电子邮件地址和密码。当我输入这些时,Google 要求进行第二次身份验证:要么查看带有代码的图像(终端上什么也没有显示),要么 "listen and type the number that you hear"。当我输入该命令时,终端回复 "is not found" 而我听不到任何声音(见下图)。

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

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

非常感谢 贝尔蒂

如文档中所述:

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

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

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

使用 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()

如果你想自动区分本地和远程机器来选择认证方式,我建议查看这些问题: