在 python 子进程中尝试 运行 rsync 时出现意外的远程 arg 错误

Getting an Unexpected remote arg error when trying to run rsync in python subprocess

我正在尝试在 python 3.4 中使用子进程模块的 call() 方法和用于身份验证的 public 密钥进行 Rsync 调用,以便我可以同步远程文件夹.文件夹的位置通过 JSON 动态传递。涉及的代码如下:

response_dict = json.loads(response)
source = 'user@server.example.com:' + response_dict['path'] + '/'
args = ['rsync', '-rv', '-e', '--delete', '--progress', '--update', 'ssh', '-i', '/path/to/public.key', source, '/path/to/local/folder/']
call(args)

我尝试了该命令的多种变体,包括:

args = ['rsync', '-rv', '-e', 'ssh', '-i', '/path/to/public.key', source, '/path/to/local/folder/', '--delete', '--progress', '--update']

args = ['rsync', '-rv', '-e', 'ssh', '-i', '/path/to/public.key', '-l', 'user', source, '/path/to/local/folder/', '--delete', '--progress', '--update']

甚至

args = ['rsync', '-rv', '-e', 'ssh', '-i', '/path/to/public.key', '-l', 'user', 'user@server.example.com:' + response_dict['path'] + '/', '/path/to/local/folder/', '--delete', '--progress', '--update']

但我得到同样的错误:

Unexpected remote arg: user@server.example.com:/path/to/remote/folder/ 
rsync error: syntax or usage error (code 1) at main.c(1330) [sender=3.1.1]

我是 python 的新手,并且在学习的过程中学到了很多东西,但是这个让我完全难住了。我整天和昨天的大部分时间都在谷歌搜索,但我发现的类似问题的每一个解决方案都没有效果。如果有人能帮我找出问题所在,将不胜感激。

首先,您应该验证 ssh 命令是否有效。如果没有,那么尝试让它在 Python.

中工作是没有意义的

其次,-e命令应该是单个字符串,例如

args = ["rsync", "-rv", "-e", "ssh -i /path/to/public.key", "user@server.example.com:/path/to/remote/folder/", "/path/to/local/folder/", "--delete", "--progress" "--update"]