Snakemake --forceall --dag приводит к ошибке мистериуса: ‹stdin›: синтаксическая ошибка в строке 1 рядом с «Файл» из Graphvis

Мои попытки построить DAG или граф правил из конвейера RNA-seq с использованием snakemake приводят к сообщению об ошибке от graphviz. 'Ошибка:: синтаксическая ошибка в строке 1 рядом с' Файл '.

Ошибку можно исправить, закомментировав две команды печати без видимых синтаксических ошибок. Я пробовал преобразовать скрипты из UTF-8 в Ascii в Notepad ++. Похоже, что у Graphviz есть проблемы с этими двумя конкретными операторами печати, потому что в сценариях конвейера есть другие операторы печати. Несмотря на то, что ошибку легко исправить, она все равно раздражает, потому что я хотел бы, чтобы коллеги могли без проблем строить эти диаграммы для своих публикаций, а операторы печати информируют их о том, что происходит в рабочем процессе. Мой конвейер состоит из файла змеи и нескольких файлов правил, а также файла конфигурации. Если строка, вызывающая нарушение, закомментирована в файле Snakefile, то graphviz столкнется с проблемой с другой строкой в ​​сценарии правила.

#######Snakefile
!/usr/bin/env Python
import os
import glob
import re
from os.path import join
import argparse
from collections import defaultdict
import fastq2json
from itertools import chain, combinations
import shutil
from shutil import copyfile
#Testing for sequence file extension
directory = "."
MainDir = os.path.abspath(directory) + "/"
## build the dictionary with full path for each for sequence files
fastq=glob.glob(MainDir+'*/*'+'R[12]'+'**fastq.gz')
if len(fastq) > 0 :
    print('Sequence file extensions have fastq')
    os.system('scripts/Move.sh')
    fastq2json.fastq_json(MainDir)
else :
    print('File extensions are good')
######Rule File
if not config["GroupdFile"]:
    os.system('Rscript scripts/Table.R')
    print('No GroupdFile provided')

змейка --forceall --rulegraph | dot -Tpdf> dag.pdf должен привести к выводу pdf, показывающему рабочий процесс snakemake, но если две строки не закомментированы, это приведет к ошибке:: синтаксическая ошибка в строке 1 рядом с


person Manninm    schedule 16.08.2019    source источник


Ответы (1)


Чтобы понять, что происходит, внимательно посмотрите на команду для создания файла dag.pdf.

Попробуйте первую часть своей команды:

snakemake --forceall --rulegraph

Что это значит? Он печатает dag в текстовой форме.

Используя символ |, вы «перенаправляете» этот отпечаток в следующую часть вашей команды:

dot -Tpdf > dag.pdf

И эта часть создает настоящий PDF-файл из текста, который передается по конвейеру и сохраняется в dag.pdf. Проблема в том, что, когда ваш файл snakefile делает операторы печати, эти отпечатки также передаются по конвейеру второй половине вашей команды, что мешает созданию вашего dag.pdf.

Какой-то хакерский способ решить проблему, чтобы иметь возможность печатать, но также и иметь возможность генерировать даг, - это использовать функцию ведения журнала snakemake. Это не документированный способ и немного хакерский, но для меня он работает очень хорошо:

from snakemake.logging import logger

logger.info("your print statement here!")
person Maarten-vd-Sande    schedule 16.08.2019
comment
Спасибо за эту уловку. Я думал о том, чтобы попробовать os.system (echo), как вы думаете, это будет иметь такой же эффект? - person Manninm; 17.08.2019
comment
Я не знаю. Почему бы тебе не попробовать? :) - person Maarten-vd-Sande; 17.08.2019
comment
Спасибо. В качестве альтернативы также можно использовать печать в stderr. - person PlasmaBinturong; 09.03.2020