Задать вопрос

Python, rsync и subprocess.call — в чем проблема?

Здравствуйте.

Есть питон скрипт, в некоторый момент вызывается rsync с параметрами через subprocess.call. Упрощенный кусочек скрипта. Вначале функцией формируется строка exclude_list и возвращается, rsync должен принять ее как параметр запуска.
print(exclude_list())
>> --exclude=var --exclude=opt --exclude=home
subprocess.call(['rsync', '-aAX', '/', '/mnt/', exclude_list()])

Проблема в том, что если exclude_list равен такой строке:
print(exclude_list())
>> --exclude=var

то все отлично работает, rsync пропускает данную директорию.

Но как только добавляется второй exclude (1 пример кода) все сразу же ломается, rsync запускается без ошибок, но директории не пропускает. Смотрел ps'ом, rsync'у передаются все параметры.

Объясните, пожалуйста, как и почему это происходит. Спасибо.
Python 3.4.0
Rsync 3.1.0
os Arch linux
  • Вопрос задан
  • 3994 просмотра
Подписаться 4 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
@encyclopedist
subprocess.call ожидает список аргументов, по одному аргументу в элементе списка.
Если у вас exlude_list это строка, то её надо перед передачей в subprocess.call разбить на части и добавить к списку аргументов, примерно так:
subprocess.call(['rsync', '-aAX', '/', '/mnt/'] + exclude_list().split())
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽