LINUX.ORG.RU

Как в python3 передать в subprocess список как аргументы команды

 , ,


0

1

Например, есть список

    backup_files_list = [
        "/home/user/.vim",
        "/home/user/.vimrc",
        "/home/user/.ssh",
        "/home/user/.mybash"
    ]

Я хочу использовать элементы этого списка как источники для команды rsync.

    run(["rsync", "-aRhv", "--delete", "--dry-run",
         "--prune-empty-dirs", f"--log-file={log_file}",
         " ".join([x for x in backup_files_list]),
         target])

А рсинк ругается

building file list ...
rsync: [sender] link_stat "/home/user/.vim /home/user/.vimrc /home/user/.ssh /home/user/.mybash" failed: No such file or directory (2)

Я так понимаю, что рсинк расценивает этот как целую строку, а не как ряд отдельных источников. Если не джоинить, то рсинк это вообще не съест. По одному передавать в цикле не хотелось бы. Как правильно написать?

И насоветуйте нормальную литературу (именно текстовую информацию, а не видео) по использованию питона в сисадминстве линукса для скриптов и прочего. Нашел из серьезного только ОРайли, но там времен второго питона учебник.

… и чтоб два раза не вставать…

" ".join(file_list) и " ".join([x for x in file_list]) дают одинаковый результат.

Неплохая книжка, imho, «Effective Python» (во втором издании остался только третий питон).

Чем использование питона «в сисадминстве линукса для скриптов и прочего» отличается от использования питона «для скриптов»?

frob ★★★★★
()
Ответ на: комментарий от frob

Использование Python (или Perl) вместо обычного командного языка хоть и возможно, но не даёт очевидной выгоды, поэтому не популярно

Partisan ★★★★
()
Ответ на: комментарий от Partisan

Иииии…?

Язык общего назначения, может в пределах разумного применяться для чего попало. Сисадминство не является областью знаний, в которой можно ожидать значительного количества «особенностей» применения конкретно питона, ради которых действительно имело бы смысл наваять книжонку «Триста двадцать секретов питона для сисадмина: за 17 дней притворись знатоком для чайников (с бонусным ДВД-диском)».

Выгода зависит от задачи. Вместо борьбы с жадностью sed-а или выдумывания чем заменить look-ahead/behind делаем на перле/питоне/далеесовсеми попутно генерим красивенький ёксель для менеджера и живём дальше в своё удовольствие.

frob ★★★★★
()
Ответ на: комментарий от Partisan

Использование Python (или Perl) вместо обычного командного языка хоть и возможно, но не даёт очевидной выгоды, поэтому не популярно

ага и регулярные выражения не нужны…

tz4678_2
()
Ответ на: комментарий от InterVi

Доки читаю, обязательно, но нужно что-то практическое. Люблю смотреть применение на практике в реальных задачах по ходу разбора теории. В доках этого нет.

Entmatix
() автор топика
Ответ на: комментарий от Entmatix

Делай проект или участвуй в свободных. Всё равно придётся постоянно писать код, иначе ничего не запомнится. Книги:

  • A Byte of Python — думаю, это лучшая книга, она под свободной лицензией CC BY-SA 3.0 и часто обновляется
  • Адитья Бхаргава — грокаем алгоритмы. Кажется, что много где они не нужны, но это не так: обучение им будет происходить методом тыка, по аналогии со стандартной библиотекой и чужими решениями, что займёт на порядки больше времени, а качество освоения выйдет так себе. Примерно 5% задач даже в «лёгком» вебе фейлят проект именно из-за незнания алгоритмов. В общем, эта книга сильно повышает хард-скилл и сразу делает мидл+.
  • Роберт Мартин — чистый код. Нужна, чтобы не погнали ссаными тряпками из профессии и чтобы самому понять свой код через месяц.
  • Мартин Фаулер — рефакторинг. По тем же причинам.

Не смущайся, что в двух последних Java, эти книги универсальны и важны для всех, просто авторы из энтерпрайза.

Примерно через год начинай читать/смотреть про паттерны, SOLID и прочее. Можно в википедии, там нормально написано. Или у Немчинского на ютубе. Хороших книг по этой теме не знаю.

Для практики, если совсем не можешь ничего выдумать:

InterVi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.