4

我尝试使用 snakemake 从 RNA-seq 管道构建 DAG 或规则图会导致来自 graphviz 的错误消息。'错误::'文件'附近的第 1 行中的语法错误。

可以通过注释掉两个没有可见语法错误的打印命令来纠正该错误。我尝试在 Notepad++ 中将脚本从 UTF-8 转换为 Ascii。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')

snakemake --forceall --rulegraph | dot -Tpdf > dag.pdf 应该会产生一个显示 snakemake 工作流程的 pdf 输出,但是如果这两行没有被注释掉,则会导致 Error: : syntax error in line 1 near

4

1 回答 1

4

要了解发生了什么,请仔细查看生成dag.pdf.

尝试命令的第一部分:

snakemake --forceall --rulegraph

那有什么作用?它以文本形式打印出dag

通过使用一个|符号,您可以“管道”(传递)此打印到命令的下一部分:

dot -Tpdf > dag.pdf

这部分从“管道”的文本中生成实际的 pdf 并存储在dag.pdf. 问题是,当您的蛇文件制作打印语句时,这些打印件也会“通过管道”传送到您的命令的后半部分,这会干扰您的dag.pdf.

我如何解决问题以便能够打印以及能够生成 dag 的一种有点骇人听闻的方式是使用 snakemake 的日志记录功能。这不是一个记录的方式,有点hackish,但对我来说效果很好:

from snakemake.logging import logger

logger.info("your print statement here!")
于 2019-08-16T21:11:06.960 回答