Snakemake --forceall --dag results in mysterius Error: <stdin>: syntax error in line 1 near 'File' from Graphvis

Snakemake --forceall --dag results in mysterius Error: <stdin>: syntax error in line 1 near 'File' from Graphvis

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

可以通过注释掉两个没有可见语法错误的打印命令来更正错误。我尝试在 Notepad++ 中将脚本从 UTF-8 转换为 Ascii。 Graphviz 似乎对这两个特定的打印语句有问题,因为管道脚本中还有其他打印语句。尽管错误很容易纠正,但它仍然很烦人,因为我希望同事们能够毫不费力地为他们的出版物构建这些图表,并且打印语句会告知他们工作流程中发生的事情。我的管道由一个 snakefile 和多个规则文件以及一个配置文件组成。如果有问题的行在 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 输出,但如果这两行未被注释掉,则会导致错误::第 1 行附近的语法错误

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

的命令

试试你命令的第一部分:

snakemake --forceall --rulegraph

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

通过使用 | 符号,您 'pipe'(传递)此打印到命令的下一部分:

dot -Tpdf > dag.pdf

这部分从 'piped' 的文本生成实际的 pdf 并存储在 dag.pdf 中。问题是,当你的 snakefile 发出打印语句时,这些打印也会 'piped' 到你命令的后半部分,这会干扰你的 dag.pdf 的制作。

我解决这个问题的一种有点老套的方法是使用 snakemake 的日志记录功能来打印,但也能够生成 dag。这不是一种记录在案的方式,而且有点老套,但对我来说真的很好用:

from snakemake.logging import logger

logger.info("your print statement here!")