Snakemake - удаляет все не выходные файлы, созданные рабочим процессом - PullRequest
2 голосов
/ 01 апреля 2020

У меня есть рабочий процесс, который производит тонны файлов, большинство из которых не являются результатом какого-либо правила (они являются промежуточными результатами). Я хотел бы иметь возможность удалять все, что не является выводом какого-либо правила после , рабочий процесс завершен. Это было бы полезно для архивирования.
Прямо сейчас единственный способ, который я нашел, - это определить все выходные данные всех правил как защищенные, а затем запустить snakemake --delete-all-output. Два вопроса:
1. Это путь к go или есть лучшее решение?
2. Есть ли способ автоматически определить все выходы как защищенные, или мне нужно go через весь код и обернуть все выводы с protected()?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Может быть, поможет опция - список без отслеживания ?

  --list-untracked, --lu
                        List all files in the working directory that are not
                        used in the workflow. This can be used e.g. for
                        identifying leftover files. Hidden files and
                        directories are ignored.
2 голосов
/ 01 апреля 2020

В дополнение к предложению @ dariober вот несколько идей:

  • Звучит так, как будто вы уже знаете это, но вы можете обернуть ненужный вывод в temp(), что приведет к его удалению Snakemake автоматически. Вы можете комбинировать это с --notemp для отладки. При temp() удаление будет происходить постепенно, а не после завершения рабочего процесса.
  • Другой вариант может заключаться в использовании ловушки onsuccess, определенной snakemake. Из docs «Обработчик onsuccess выполняется, если рабочий процесс завершился без ошибок». Так, скажем, если на протяжении всего рабочего процесса вы помещаете ненужный файл в папку temp/ или аналогичную, вы можете использовать shutil.rmtree("temp") в onsuccess, что приведет к удалению всех ненужных файлов только после успешного завершения рабочего процесса, как вам требуется , (Обратите внимание на аналогичный onerror, если он вам нужен.)
...