Snakemake: os.listdir() перечисляет файлы, которых там нет

#python #conda #snakemake

#python #conda #snakemake

Вопрос:

Редактировать:

Я начал с вызова conda activate snakemake


Мой Snakefile содержит следующее:

 configfile: "config.yaml"

rule all:
 input: expand("{root_dir}/{geoid}/*.CEL", root_dir = config['root_dir'], geoid = config['geoid'])

rule getCelFiles:
 output: "{root_dir}/{geoid}/*.CEL"
 run:
  if not os.path.exists(os.path.join(wildcards.root_dir,wildcards.geoid)) :
   shell("Rscript scripts/getCELFiles.R {wildcards.geoid} "
         "cd {wildcards.geoid} amp;amp; tar -xvf * amp;amp; rm *.tar amp;amp; gunzip *")
  else :
   print(os.listdir())
   print("getcwd:", os.getcwd())
   print(os.path.exists(os.path.join(wildcards.root_dir,wildcards.geoid)))
   print(os.path.join(wildcards.root_dir,wildcards.geoid))
  

Когда я запускаю ls в текущем каталоге, я получаю следующий вывод:

 config.yaml  old  README.txt  scripts  Snakefile
  

Но вывод else условия возвращает следующее:

 os.listdir(): 
['.snakemake', 'Snakefile', 'README.txt', 'scripts', '.DS_Store', 'old', 'GSE4290', 'config.yaml']

getcwd: 
/home/rebecca/workflows/exploring_tools/affymetrix_preprocess/snakemake # current working directory 

os.path.exists: True

os.path.join: 
/home/rebecca/workflows/exploring_tools/affymetrix_preprocess/snakemake/GSE4290 # directory that is being checked for

  

Кажется, там есть файлы / папки, а именно GSE4290 , которые «на самом деле» там нет. Мне интересно, выполняет ли snakemake run директиву в какой-то «параллельной» среде? В принципе, я не уверен, как получить доступ к GSE4290 папке, чтобы код выполнялся должным образом (т. Е. Запуск блока с помощью командной строки Rscript и т. Д.).

Заранее спасибо.

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

1. попробуйте использовать ls -a и просмотрите все файлы каталога, присутствующие в этом каталоге

2. Вы уверены, что output: "{root_dir}/{geoid}/*.CEL" это не создает каталог? потому что похоже, что это так

3. @sahasrara62: Я попробовал это, получил следующий вывод: «. .. config.yaml .DS_Store старый README.txt скрипты Snakefile .snakemake»

4. @DeepSpace Разве этот каталог не должен создаваться после директивы «run»? Т.е. Когда вызывается Rscript, вывод еще не создан. Кроме того, разве этот каталог не был бы там после запуска процесса, если бы это было правдой? Я предполагаю, что это проверяет мое понимание snakemake.

5. @DeepSpace Update: вы правы, каталог создается в начале рабочего процесса и, следовательно, существует во время выполнения рабочего процесса, даже если он завершается с ошибкой. Спасибо!