将环境conda中的shell命令与python脚本混合

问题描述

我想在环境conda中将shell命令与任何Python脚本混合使用,因此无法使用'run'部分...

我尝试过:

shell:"""
   gunzip -c {input.ech} | NanoFilt -l {params.min_length} --maxlength {params.max_length} -s {input.summary} -q {params.q} --readtype {params.rd} | gzip > Working_space_ont/01_nanofilt/{wildcards.sample}_filt_{params.q}.fastq.gz   
   python3 reinit.py
   while [[ -f Working_space_ont/01_nanofilt/{wildcards.sample}_filt_{params.q}.fastq.gz ]] && [[ grep -c '>' Working_space_ont/01_nanofilt/{wildcards.sample}_filt_{params.q}.fastq.gz < {params.cov} ]]; do
       python3 quality_minor.py
       gunzip -c {input.ech} | NanoFilt -l {params.min_length} --maxlength {params.max_length} -s {input.summary} -q {params.q} --readtype {params.rd} | gzip > Working_space_ont/01_nanofilt/{wildcards.sample}_filt_{params.q}.fastq.gz
   done
   mv Working_space_ont/01_nanofilt/{wildcards.sample}_filt_{params.q}.fastq.gz {output} 
"""

我的退出状态1为非零错误

reinit.py:

import yaml

with open("config_wf.yaml") as f:
    old_yaml = yaml.load(f)

old_yaml["params"]["filtration"]["quality"] = old_yaml["params"]["filtration"]["quality_fix"]  

with open("config_wf.yaml",'w') as f:
    yaml.dump(old_yaml,f,default_flow_style=False)

quality_minor.py:

import yaml

with open("config_wf.yaml") as f:
    old_yaml = yaml.load(f)

old_yaml["params"]["filtration"]["quality"] -= 1

with open("config_wf.yaml",'w') as f:
    yaml.safe(old_yaml,default_flow_style=False)

您对我有什么想法吗?
最好的问候,

伊娃

解决方法

(为了将来:您应该编辑问题以添加其他信息,而不是发布其他信息作为答案)

让我大吃一惊的主要问题是,您正在将shell命令(gunzip -c ...)与python代码(old_yaml = open("config_wf.yaml","r") ...)混合在一起。当外壳读取python代码时,它将引发错误。

如果您需要按照相同的规则执行python和shell代码,则可能需要以下代码:

rule filtration:
    input:
        ...
    output:
        ...
    params:
        ...
    run:
        shell('gunzip -c ...')

        old_yaml = open("config_wf.yaml","r")
        ...more python code here...

        shell(...) # Other shell commands

但是我不知道您的代码中可能还有其他问题,也许还有更好的方法可以满足您的需求。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...