rsync-path:与 subprocess.Popen 一起使用时没有这样的文件或目录

rsync-path:与 subprocess.Popen 一起使用时没有这样的文件或目录

我习惯rsync将代码从一台服务器部署到另一台服务器。在暂存目录中,我通过放置所有文件(例如 php 脚本)来构建应用程序,就像它们应该出现在远程应用程序服务器上一样(这些文件归我所有)。之后,我使用 rsync(使用 python 部署包装器工具)将新文件结构与远程文件结构同步。

在 Python 中的调用如下所示:

rsync = ['/usr/bin/rsync', '-avP', '--rsync-path="sudo -u www-data -g www-data /usr/bin/rsync"', stage_dir, getpass.getuser() + '@' + server + ':/data/application'] + DEFAULT_RSYNC_ARGS
start = time.time()
logger.debug('Running rsync command: `%s`', ' '.join(rsync))
p = subprocess.Popen(rsync, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

if stdout:
    logger.debug(stdout)
if stderr:
    logger.error(stderr)

DEFAULT_RSYNC_ARGS定义为:

DEFAULT_RSYNC_ARGS = [
    '--exclude=**/.svn/lock',
    '--exclude=**/mw-config/private',
    '--exclude=**/localisationCache',
    '--exclude=**/main/mw-config',
    '--exclude=**/main/sitemap',
    '--exclude=**./services',
    '--exclude=**/.git',
    '--no-perms',
    '--archive',
    '--delete-delay',
    '--delay-updates',
    '--compress',
    '--delete',
]

但是,如果我运行该脚本,我会收到以下错误消息:

21:59:51 rsync: -avP--rsync-path="sudo -u www-data -g www-data /usr/bin/rsync": unknown option
rsync error: syntax or usage error (code 1) at main.c(1572) [client=3.1.0]

但是,如果我从日志文件运行命令:

/usr/bin/rsync -aqP --rsync-path='sudo -u www-data -g www-data /usr/bin/rsync' /data/deployment/staging/ user@serverhost:/data/application --exclude=**/.svn/lock --exclude=**/mw-config/private --exclude=**/localisationCache --exclude=**/main/mw-config --exclude=**/main/sitemap --exclude=**./services --exclude=**/.git --no-perms --archive --delete-delay --delay-updates --compress --delete

一切都正常。有人能提示一下,为什么使用 python 时它不能按预期工作吗?

相关内容