繁体   English   中英

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

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

我正在尝试使用从(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 服务器上激活我的脚本时,我连接到终端环境中的谷歌页面,询问我的 email 地址和密码。 当我输入这些时,谷歌会要求进行第二次身份验证:要么查看带有代码的图像(终端上什么都没有显示),要么“听并输入你听到的数字”。 当我输入该命令时,终端回复“未找到”,我听不到任何声音(见下图)。

在此处输入图像描述

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

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

非常感谢伯蒂

如文档中所述:

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

LocalWebserverAuth()将在 localhost:8080 上生成本地网络服务器侦听(默认情况下),并尝试在用户的 web 浏览器上打开身份验证 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()

如果您想自动区分本地和远程机器以选择身份验证方法,我建议您查看以下问题:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM