用Python控制rsync?

Che*_*old 17 python bash rsync automation

我一直想编写一个python脚本,它将按顺序运行几个rsync实例,以便将数据备份到另一台计算机.

目前我只有这个文本文件和我使用的命令,我只是将它们复制粘贴到终端中,看起来有点傻.

我希望能够使用python为我做这个.我非常清楚地知道如何使用subprocess.popen,但我不知道如何让python直接与rsync交互,比如输入我的密码.python能做到吗?

就像是:

if theProccess.proccessResponse == "Password:" :
    theProccess.respond(string)
Run Code Online (Sandbox Code Playgroud)

或者我能做的最好的就是拥有它,甚至是bash脚本,只需按顺序运行rsyncs并且必须反复输入我的密码?

提前致谢.

Rya*_*ght 21

如果您想与一般的子流程进行交互,可以使用其他地方提到的pexpect.但是对于您的特定情况,假设您的rsync在ssh(默认值)上运行,那么您可能需要考虑在两台主机之间设置无密码的ssh连接,这样就无需输入密码.这是一个基于密钥的解决方案,比将密码存储在源代码中要安全得多.

这是一位讨论您确切问题的博客,并决定使用无密码ssh.


rad*_*uit 7

有一个很棒的Python模块,由Colin Stewart编写,名为RSyncBackup,鲜为人知,但很少有文档记录,但非常有用.

默认情况下,它不包含任何在rsync命令中包含密码的方法,因此我在此博客文章中修改了模块并进行了讨论:http://technofart.blogspot.com/2012/02/rsync-controlled逐python.html

我的修改后的模块的链接可以在我的帖子的下载部分找到.

基于密钥的解决方案也是一个好主意.此外,许多rsync实现将查找您可以设置的RSYNC_PASSWORD环境变量.如果您的环境变量对其他用户可见,请务必小心.


Pet*_*ell 6

我使用rsync来备份我所有客户的网站.一个脚本由cron触发,它为每个客户端使用Makefile,因为它们有不同的需求.

不要使用输入密码的内容,而是使用ssh-keygen创建公钥/私钥对并将公钥放在远程计算机上.这为您提供安全,无密码的连接.这也意味着您不必将rsync端口暴露给全世界.在你完成了这个学习曲线之后(而且它不是很陡峭)ssh 绝对是你的朋友.