Ошибка подпроцесса Python: ошибка rsync: ошибка синтаксиса или использования (код 1) в main.c (1407) [клиент= 3.0.6]

#python #subprocess #rsync

#python #подпроцесс #rsync

Вопрос:

Я пишу скрипт автоматизации Python для загрузки файлов через rsync. Запуск этого из Bash работает

 /usr/bin/rsync -av -e “/usr/bin/ssh -i $PATH_TO_SSH_IDENTITY_KEY” $SRC USER@HOSTNAME:/firstparam/secondparam
  

Однако запуск из Python выдает эту ошибку

 rsync error: syntax or usage error (code 1) at main.c(1407) [client=3.0.6]
  

Это рассматриваемый код, вызывающий rsync

 cmd = ['/usr/bin/rsync', '-av', '-e', config.ssh_identity, src, config.host   ':/rootpath'   firstparam   '/'   secondparam]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
(output, err) = p.communicate()
  

где

 config.ssh_identity = ‘/usr/bin/ssh -i $PATH_TO_SSH_IDENTITY_KEY’
config.host = ‘USER@HOSTNAME’
  

Что могло вызвать ошибку?

Комментарии:

1. сначала попробуйте получить PATH_TO_SSH_IDENTITY_KEY из os.environ .

2. Вы, вероятно, хотите, shell=False поскольку вы передаете массив параметров и не хотите, чтобы какой-либо из них был дополнительно разделен на пробелы.

Ответ №1:

Разобрался. Согласно ошибке сервера, я запускал скрипт как суперпользователь, и ему не понравилось, что я не тот, за кого себя выдавал (ec2-пользователь). Поэтому пришлось связать суперпользователя с ec2-пользователем