我在Ubuntu 12上使用Python 2.7运行这些片段。
import subprocess args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/'] subprocess.check_call(args)
失败
import subprocess args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/'] call_string = ' '.join(args) subprocess.check_call(call_string)
作品
第一个代码片段导致rsync获取无效的命令行。 使用这个选项的短版本( -e
)没有任何区别。 如果我删除 – – 部分工作正常。
使用shell=True
并没有什么区别。 从“ssh”消除引号没有任何区别,我想保留引号,所以我可以传递参数给ssh。
有什么问题?
删除ssh
周围的引号; shell通常会解析并传递参数而不加引号:
import subprocess args = ['rsync', '--rsh=ssh', '/tmp/a/', '127.0.0.1:/tmp/b/'] subprocess.check_call(args)