Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在python子流程中运行rsync时,获取意外的远程参数错误_Python_Subprocess_Rsync - Fatal编程技术网

尝试在python子流程中运行rsync时,获取意外的远程参数错误

尝试在python子流程中运行rsync时,获取意外的远程参数错误,python,subprocess,rsync,Python,Subprocess,Rsync,我试图在Python3.4中使用子流程模块的call()方法和用于身份验证的公钥进行Rsync调用,以便同步远程文件夹。文件夹的位置通过JSON动态传递。涉及的守则如下: response_dict = json.loads(response) source = 'user@server.example.com:' + response_dict['path'] + '/' args = ['rsync', '-rv', '-e', '--delete', '--progress', '--up

我试图在Python3.4中使用子流程模块的
call()
方法和用于身份验证的公钥进行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', '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"]

你有rsync命令在没有Python的shell中工作吗?如果是,那么命令是什么?最初的命令是由其他人提供的,并且它在bash脚本中运行。据我所知,它是有效的。它是:
rsync-rv-e“ssh-i/path/to/public.key”user@server.example.com:/path/to/remote/folder//path/to/local/folder/--delete--progress--update
这是champion Alasdair,非常感谢。我见过一些解决方案,其中命令的某些部分必须在一个字符串中,但我不认为这是其中之一。顺便说一句,我在发布之前已经要求发起者验证它是否正确,但他正在享受他的甜蜜时光:d再次感谢您将它分开,例如,
…“-e”、“ssh”、“-I”、“/path/to/public.key”。。。“
然后将
/path/to/public.key
视为rsync的一个单独参数,而不是
-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"]