【问题标题】:Run Rsync from Python [duplicate]从 Python 运行 Rsync [重复]
【发布时间】:2013-08-24 12:23:21
【问题描述】:

我需要从 Python 运行 rsync 命令。这可能吗?如果可以,我该怎么做?

rsync -Ccavz --delete DJStatic username@website

【问题讨论】:

  • 你可以从 python docs.python.org/2/library/subprocess.html 运行 shell 命令,fabric 也提供了一个很好的 api 来包装许多命令 shell 命令 docs.fabfile.org/en/1.4.0/index.html
  • 2017 年现在有一个纯 python rsync 库 :: pyrsync(不是包装器)
  • @philshem:repo 似乎自 2013 年以来就没有更新过。它与系统调用相比有什么优势?
  • 我已经使用系统的 rsync 和 pythons 子进程编写了一个非常基本的包装器,提供了一些功能,例如打印进度等用于我自己的个人目的:github.com/lfreist/PyRsync...

标签: python curl rsync


【解决方案1】:

您可以使用以下 sn-p 从 python 调用子进程

import subprocess
subprocess.call(["ls", "-l"])

在你的情况下,它会是这样的

subprocess.call(["rsync", "-Ccavz", "--delete","DJStatic", "username@website"])

更多详情请见here

【讨论】:

  • subprocess.call("rsync -Ccavz --delete DJStatic username@website".split()) 更具可读性和实用性。
  • @jolvi 如果你的论点都没有空格...
  • 使用 shlex.split(s) 而不是常规的 s.split() 来拆分参数,就像普通 (POSIX) shell 一样。
  • 不应使用 @jolvi 的版本(将命令作为字符串传递)!将参数作为字符串列表传递。当您由于某处变量中的一些引号或空格而无法弄清楚为什么您的 shell 命令没有按照您的预期执行时,它将为您节省大量的调试时间。节省 2-3 秒打字的代价是不值得的
  • @Brandon:对于那些在命令中没有空格的人来说,这完全没问题,而且更容易。如果有空格,可以使用 shlex.split() 而不是 split() 来修复这种方法,正如 Chris L. Barnes 所提到的。如果您谨慎使用,我认为使用该解决方案很好。除非……这会导致其他一些具体问题吗?
猜你喜欢
  • 1970-01-01
  • 2016-04-06
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 2016-09-25
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多