首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python popen rsync with rsh选项

python popen rsync with rsh选项
EN

Stack Overflow用户
提问于 2012-09-19 21:12:47
回答 2查看 2K关注 0票数 5

我正在尝试通过subrocess & popen执行rsync命令。一切都很好,直到我没有把rsh子命令放在出错的地方。

代码语言:javascript
运行
复制
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)

如果我复制/粘贴与当时输出的参数相同的参数,则可以正确执行该命令。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-19 21:47:02

如果使用'--rsh=ssh -C -p 22 -i /home/bond/.ssh/test'会发生什么(我去掉了双引号)。

我怀疑这应该是可行的。当您将行剪切/粘贴到命令行中时发生的情况是,您的shell看到双引号并将其删除,但使用它们来防止-C-p等被解释为单独的参数。当您使用一个列表调用subprocess.Popen时,您已经在没有外壳帮助的情况下对参数进行了分区,因此您不再需要用引号来保留应该拆分参数的位置。

票数 5
EN

Stack Overflow用户

发布于 2016-08-21 00:53:06

有同样的问题,我在谷歌上广泛搜索了这个问题。看起来您根本不能通过subprocess将参数传递给ssh。最后,我编写了一个外壳脚本来运行rsync命令,我可以通过subprocess.call('rsyncscript',src,dest )将参数传递给它。外壳脚本是: /usr/bin/rsync -az -e "ssh -i $3“$1 $2

这就解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12495455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档