我正在尝试通过subrocess & popen执行rsync命令。一切都很好,直到我没有把rsh子命令放在出错的地方。
from subprocess import Popen
args = ['-avz', '--rsh="ssh -C -p 22 -i /home/bond/.ssh/test"', 'bond@localhost:/home/bond/Bureau', '/home/bond/data/user/bond/backups/']
p = Popen(['rsync'] + args, shell=False)
print p.wait()
#just printing generated command:
print ' '.join(['rsync']+args)我在很多方面都试图避开'--rsh="ssh -C -p 22 -i /home/bond/.ssh/test‘’,但似乎这不是问题所在。
我收到错误rsync:无法执行ssh -C -p 22 -i /home/bond/.ssh/test:没有这样的文件或目录(2)
如果我复制/粘贴与当时输出的参数相同的参数,则可以正确执行该命令。
谢谢。
发布于 2012-09-19 21:47:02
如果使用'--rsh=ssh -C -p 22 -i /home/bond/.ssh/test'会发生什么(我去掉了双引号)。
我怀疑这应该是可行的。当您将行剪切/粘贴到命令行中时发生的情况是,您的shell看到双引号并将其删除,但使用它们来防止-C、-p等被解释为单独的参数。当您使用一个列表调用subprocess.Popen时,您已经在没有外壳帮助的情况下对参数进行了分区,因此您不再需要用引号来保留应该拆分参数的位置。
发布于 2016-08-21 00:53:06
有同样的问题,我在谷歌上广泛搜索了这个问题。看起来您根本不能通过subprocess将参数传递给ssh。最后,我编写了一个外壳脚本来运行rsync命令,我可以通过subprocess.call('rsyncscript',src,dest )将参数传递给它。外壳脚本是: /usr/bin/rsync -az -e "ssh -i $3“$1 $2
这就解决了这个问题。
https://stackoverflow.com/questions/12495455
复制相似问题