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

Posted

技术标签:

【中文标题】将环境 conda 中的 shell 命令与 python 脚本混合【英文标题】:Mix shell command in environment conda with python scripts 【发布时间】:2020-12-28 15:40:21 【问题描述】:

我想将环境 conda 中的 shell 命令与任何 Python 脚本混合使用,因此无法使用“运行”部分...

我试过了:

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 错误

重新初始化.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)

你对我有什么想法吗? 最好的问候, 伊娃

【问题讨论】:

你能显示错误消息和导致它的整个规则吗? 【参考方案1】:

(对于未来:您应该编辑您的问题以添加附加信息,而不是发布附加信息作为答案)

让我眼前一亮的主要问题是您将 shell 命令 (gunzip -c ...) 与 python 代码 (old_yaml = open("config_wf.yaml", "r") ...) 混合在一起。当 shell 读取 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

但你的代码中可能还有其他问题,我不知道,也许还有更好的方法来做你需要的事情。

【讨论】:

没错,我混合了两种语言....非常感谢!

以上是关于将环境 conda 中的 shell 命令与 python 脚本混合的主要内容,如果未能解决你的问题,请参考以下文章

conda创建python环境

conda安装过程和创建虚拟环境

Linux python默认使用conda

Anaconda使用conda activate激活环境出错:CommandNotFoundError: Your shell has not been properly configured to

conda创建虚拟环境后文件夹中只有conda-meta文件夹,无法将环境添加到IDE中

windows11 conda 创建/删除/查看环境命令 + 换源 + 换环境安装路径