问题描述
我想在环境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
但是我不知道您的代码中可能还有其他问题,也许还有更好的方法可以满足您的需求。