Управление rsync с помощью Python?

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

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

Я хочу использовать python для этого. Я очень смутно знаю, как использовать subprocess.popen, но я не знаю, как заставить python напрямую взаимодействовать с rsync, например, для ввода моего пароля для меня. Может ли python это сделать?

Что-то вроде:

if theProccess.proccessResponse == "Password:" : theProccess.respond(string) 

Или лучшее, что я могу сделать, это просто или сценарий bash, просто запустить rsyncs в последовательности и ввести пароль снова и снова?

Заранее спасибо.

8 Solutions collect form web for “Управление rsync с помощью Python?”

Если вы хотите взаимодействовать с подпроцессом в целом, вы можете использовать pexpect, как упоминалось в другом месте. Но для вашего конкретного случая, предполагая, что ваш rsync работает поверх ssh (по умолчанию), вы можете захотеть настроить подключение ssh без пароля между двумя хостами, что избавит вас от необходимости вводить пароль. Это ключевое решение и будет гораздо более безопасным, чем сохранение вашего пароля в исходном коде.

Вот блоггер, который обсуждает вашу точную проблему и решает пойти с без пароля ssh.

Там отличный модуль Python, написанный Колином Стюартом, называется RSyncBackup, который мало известен и мало документирован, но очень полезен.

По умолчанию он не содержит методов включения пароля в ваши команды rsync, поэтому я изменил модуль и рассказал об этом в этом сообщении в блоге: http://technofart.blogspot.com/2012/02/rsync-controlled -по-python.html

Ссылка на мой модифицированный модуль можно найти в разделе «Загрузка» моего сообщения.

Ключевое решение также является отличной идеей. Кроме того, многие реализации rsync будут искать переменную среды RSYNC_PASSWORD, которую вы можете установить. Просто будьте осторожны, если переменные окружения видны другим пользователям.

Я использую rsync для резервного копирования всех веб-сайтов моих клиентов. Сценарий запускается cron, и он использует Makefiles для каждого клиента из-за их различных потребностей.

Вместо того, чтобы делать что-то, что вводит пароль, используйте ssh-keygen для создания пары открытого / закрытого ключа и поместите свой открытый ключ на удаленную машину. Это дает вам безопасные соединения без пароля. Это также означает, что вам не нужно открывать порт rsync для всего мира. После того, как вы пройдете курс обучения на этом (и это не очень круто), ssh определенно ваш друг.

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

Более того, вы спросили, как взять пароль в интерактивном режиме. Для этого я бы предложил встроенный getpass. Короче говоря, вы не взаимодействуете с rsync. Вы берете пароль от пользователя RIGHT перед выполнением rsync и передаете его в rsync. Другой вариант – позволить пользователю передавать его в качестве опции, большинство сценариев командной строки используют optparse

 import getpass password = getpass.getpass('Password for %s: ' % opts.user) try: #code that uses password except Exception, e: # test to see if str(e) is really an invalid password error, if so tell the user and return or loop, up to you # else raise Exception(e) # the error that was raised in the first place 

Чтобы продолжить, я наткнулся на ваш вопрос, потому что искал что-то подобное. Просто FYI кому-то еще, я закончил ссылку на две из этих переполняющих ссылок стека: вызов rsync из python subprocess.call и Python Subprocess.Popen из потока

Я не думаю, что он поддерживает rsync из коробки, но у paramiko могут быть некоторые компоненты, которые вы могли бы переработать?

Если вам необходимо программно управлять подпроцессом , вы должны изучить использование pexpect .

Если вам просто нужно ввести пароль, вы можете попробовать RSYNC_PASSWORD переменную окружения RSYNC_PASSWORD или использовать опцию RSYNC_PASSWORD --password-file .

Я создал пакет paralle_rsync, который выполняет команды rsync параллельно. Вы можете использовать его внутри структуры для выполнения операции на нескольких хостах одновременно.

Python - лучший язык программирования в мире.