【发布时间】:2020-04-15 13:26:42
【问题描述】:
我正在编写一个snakemake 来执行多个操作。除最后一条 (mvQsubLogs) 之外的所有规则都适用于测试文件。最后一条规则应该将qsub 命令(我在集群上运行snakemake)生成的.e 和.o 文件从-e 和-o 标志指定的目录移动到指定的目录在我的规则的输出指令中,一旦完成一些操作(请参见下面规则中的input指令):
rule mvQsubLogs:
input:
# FastQC
rules.fastQC.output,
# Markduplicates
rules.markDups.output.markDupBam,
rules.markDups.output.markDupMetrics,
# mosdepth
rules.mosdepth.output.DIR,
# editflagStat
rules.edit_flagStat.output,
# edit idxStats
rules.edit_idxStats.output,
# insertSizeMetrics
rules.insertSizeMetrics.output.METRICS,
rules.insertSizeMetrics.output.PDF
output:
directory("{sample}/logs")
shell:
"mkdir -p {wildcards.sample}/logs "
"| mv {LOGDIR}{wildcards.sample}* {output}"
可以在下面找到包含我想要执行的所有作业的 DAG:
我用来向集群启动作业的命令是
snakemake -p -s Snakefile_v6_ngs_bngs05b --cluster "qsub -q onlybngs05b -e {LOGD
IR} -o {LOGDIR}" -j 5 --use-conda --jobname "{wildcards.sample}.{rule}.{jobid}"
注意.e 和.o 文件的生成位置很重要,在本示例中为LOGDIR。 LOGDIR 实际上是从配置文件中检索到的(LOGDIR = config['logsOutDir'] - 在蛇文件本身中,logsOutDir: "/home/ngs/jobout/" - 在配置文件中指定)。
当我调用完整的 snakemake 时,我得到的规则 mvQsubLogs 的命令是:
rule mvQsubLogs:
input: NIPT-PearlPPlasma-03-PPx_S3downSample/fastQC, NIPT-PearlPPlasma-03-PPx_S3downSample/aligned/NIPT-PearlPPlasma-03-PPx_S3downSample.sorted.markDup.bam, NIPT-PearlPPlasma-03-PPx_S3downSample/dups/NIPT-PearlPPlasma-03-PPx_S3downSample.markDups.metrics.txt, NIPT-PearlPPlasma-03-PPx_S3downSample/depth/, NIPT-PearlPPlasma-03-PPx_S3downSample/dups/NIPT-PearlPPlasma-03-PPx_S3downSample.sorted.markDup.flagstat.edited.csv, NIPT-PearlPPlasma-03-PPx_S3downSample/readsDist/NIPT-PearlPPlasma-03-PPx_S3downSample.sorted.markDup.idxstats.edited.csv, NIPT-PearlPPlasma-03-PPx_S3downSample/insertSizeDist/NIPT-PearlPPlasma-03-PPx_S3downSample_ISmetrics.txt, NIPT-PearlPPlasma-03-PPx_S3downSample/insertSizeDist/NIPT-PearlPPlasma-03-PPx_S3downSample_ISHist.pdf
output: NIPT-PearlPPlasma-03-PPx_S3downSample/logs
jobid: 7
wildcards: sample=NIPT-PearlPPlasma-03-PPx_S3downSample
mkdir -p NIPT-PearlPPlasma-03-PPx_S3downSample/logs | mv /home/ngs/jobout/NIPT-PearlPPlasma-03-PPx_S3downSample* NIPT-PearlPPlasma-03-PPx_S3downSample/logs
这听起来对我来说是正确的:(在创建文件应该移动到的目录之后,为了安全起见)我应该移动所有以NIPT-PearlPPlasma-03-PPx_S3downSample(即wildcards.sample)开头的文件,位于/home/ngs/jobout/ 到 NIPT-PearlPPlasma-03-PPx_S3downSample/logs,而最后一个目录相对于工作目录。
查看由mvQsubLogs 规则生成的.e 文件,我得到:
mkdir -p NIPT-PearlPPlasma-03-PPx_S3downSample/logs | mv /home/ngs/jobout/NIPT-PearlPPlasma-03-PPx_S3downSample* NIPT-PearlPPlasma-03-PPx_S3downSample/logs
mv: target ‘NIPT-PearlPPlasma-03-PPx_S3downSample/logs’ is not a directory
这对我来说没有意义,因为应该已经创建了输出目录 NIPT-PearlPPlasma-03-PPx_S3downSample/logs
我已经尝试指定文件应该移动到的完整路径,虽然它也不起作用,但我得到了同样的错误。
谁能发现我的代码中的错误在哪里?
【问题讨论】: