我希望将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, f, default_flow_style=False)你对我有什么想法吗?
诚挚的问候,
Eva
发布于 2020-09-27 00:17:10
看起来您的python脚本正在更改工作流的配置yaml,而不是直接将其传递给nanofilt命令。那么你有无限循环吗?配置yaml在启动时读取snakemake进程,因此在规则中更改它不会产生任何效果。
您可以通过snakemake实现这一点,可以使用输入函数中的尝试对参数进行参数递减,当筛选失败时,作业会失败。
一个更干净的解决方案是编写一个python脚本,它将使用纳被膜作为库并包装它的执行。主要方法是笔直的。构建您的args并根据需要进行调整,那么所有的评估代码和循环都将在python中。
https://stackoverflow.com/questions/63917484
复制相似问题