pydrive: пытается загрузить файлы на Google Drive с удаленного сервера - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь загрузить файлы на диск Google автоматически с помощью сценария Python, работающего удаленно с сервера (Ubuntu).

В моем коде у меня есть следующие простые строки из 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()

У меня есть файл setting.yaml в моем каталоге python, чтобы скрипт мог автоматически аутентифицироваться после первой ручной аутентификации, и client_secrets.json. Я в основном выполнил все шаги в https://pythonhosted.org/PyDrive/oauth.html.

Однако, когда я активирую свой скрипт на удаленном сервере Ubuntu, я подключаюсь к странице Google в терминальной среде, запрашивая у меня адрес электронной почты ипароль. Когда я ввожу их, Google запрашивает повторную аутентификацию: либо посмотрите на изображение с кодом (а на терминале ничего не появляется), либо «прослушайте и введите номер, который вы услышите». Когда я набираю эту команду, терминал отвечает «не найден», и я ничего не слышу (см. Рисунок ниже).

enter image description here

Я застряли я не знаю, как обойти эту проблему. Мне, к сожалению, нужно пройти аутентификацию хотя бы один раз, тогда скрипт будет автоматически аутентифицироваться. Я действительно не вижу, как пропустить этот шаг.

Любая идея / комментарий / понимание будет принята с благодарностью

Большое спасибо Берти

1 Ответ

0 голосов
/ 28 октября 2019

Как упомянуто в документации:

Вы также можете использовать CommandLineAuth(), который вручную получает код от пользователя в командной строке.

Появится 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()

Если вы хотите автоматически различать локальный ина удаленных машинах, чтобы выбрать метод аутентификации, я бы порекомендовал проверить следующие вопросы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...