pydrive:尝试从远程服务器将文件上传到Google云端硬盘

时间:2019-10-28 11:00:23

标签: python ubuntu google-drive-api google-oauth2 pydrive

我正在尝试使用从(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要求进行第二次身份验证:要么查看带有代码的图像(终端上什么都没有显示),要么“收听并键入您听到的电话号码”。当我键入该命令时,终端会回复“未找到”,并且我听不到任何声音(请参见下图)。

enter image description here

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

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

非常感谢你 贝蒂

1 个答案:

答案 0 :(得分:0)

如文档中所述:

  

您还可以使用CommandLineAuth()手动从命令行获取用户代码。

LocalWebserverAuth()将在本地主机上创建本地Web服务器(默认情况下):8080,并尝试在用户的Web浏览器上打开身份验证URL。经过身份验证后,打开的页面将身份验证代码传达给在localhost上运行的本地服务器。

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

使用CommandLineAuth()将在远程服务器的终端上打印出URL,您可以在本地浏览器中打开该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()

如果要自动区分本地计算机和远程计算机以选择身份验证方法,建议您检查以下问题:

相关问题