logSnakemake 允许使用指定日志文件名称的参数为每个规则创建日志。将输出结果通过管道传输到此日志相对简单shell,但我无法找出记录输出输出的方法run(即 python 脚本)。
一种解决方法是将 python 代码保存在脚本中,然后从 shell 运行它,但我想知道是否还有另一种方法?
我对snakemake很陌生,而且对python也不太熟悉(所以抱歉,这可能是一个非常基本的愚蠢问题):
我目前正在构建一个管道来使用atlas分析一组 bamfiles 。这些 bam 文件位于不同的文件夹中,不应移动到公共文件夹中。因此,我决定提供一个如下所示的示例列表(这只是一个示例,实际上示例可能位于完全不同的驱动器上):
Sample Path
Sample1 /some/path/to/my/sample/
Sample2 /some/different/path/
Run Code Online (Sandbox Code Playgroud)
并将其加载到我的 config.yaml 中:
sample_file: /path/to/samplelist/samplslist.txt
Run Code Online (Sandbox Code Playgroud)
现在到我的 Snakefile:
import pandas as pd
#define configfile with paths etc.
configfile: "config.yaml"
#read-in dataframe and define Sample and Path
SAMPLES = pd.read_table(config["sample_file"])
BAMFILE = SAMPLES["Sample"]
PATH = SAMPLES["Path"]
rule all:
input:
expand("{path}{sample}.summary.txt", zip, path=PATH, sample=BAMFILE)
#this works like a charm as long as I give the zip-function in the rules 'all' and 'summary':
rule indexBam:
input:
"{path}{sample}.bam"
output:
"{path}{sample}.bam.bai"
shell:
"samtools …Run Code Online (Sandbox Code Playgroud) 是否可以通过蛇形规则中的特定规则来限制要运行的作业数量?--jobs全局控制一次允许运行多少个作业,但是我想通过特定规则进行限制。
这是因为,我有一个特定的规则,该规则最多可以同时用于两个作业。但是,如果我设置--jobs为20,则会导致该特定规则中的工具崩溃。我在LSF群集中使用snakemake v5.2.0。
我有一个奇怪的问题,它来来去去,我真的不知道什么时候以及为什么。
我正在运行这样的蛇形管道:
conda activate $myEnv
snakemake -s $snakefile --configfile test.conf.yml --cluster "python $qsub_script" --latency-wait 60 --use-conda -p -j 10 --jobscript "$job_script"
Run Code Online (Sandbox Code Playgroud)
我在 conda 环境中安装了 snakemake 5.9.1(也尝试降级到 5.5.4)。
如果我只运行这个命令,这工作正常,但是当我将此命令 qsub 到我正在使用的 PBS 集群时,我收到一个错误。我的 qsub 脚本如下所示:
#PBS stuff...
source ~/.bashrc
hostname
conda activate PGC_de_novo
cd $workDir
snakefile="..."
qsub_script="pbs_qsub_snakemake_wrapper.py"
job_script="..."
snakemake -s $snakefile --configfile test.conf.yml --cluster "python $qsub_script" --latency-wait 60 --use-conda -p -j 10 --jobscript "$job_script" >out 2>err
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息是:
...
Traceback (most recent call last):
File "/path/to/pbs_qsub_snakemake_wrapper.py", line 6, in <module>
from snakemake.utils …Run Code Online (Sandbox Code Playgroud) 我正在制作一个 GUI 界面,以使我的脚本可供普通用户使用。我的问题是 - 我有一个条目小部件,当用户使用浏览按钮选择文件时,它将“文件路径”作为值。问题是条目小部件显示文件路径的开头(左端),但我更希望看到文件路径的右端。
这是我的脚本。
from Tkinter import *
from tkFileDialog import askopenfilename
app = Tk()
app.title("ABC")
app.geometry("300x100")
def browse_for_file(entry_name, filetype):
File_path = askopenfilename(filetypes = filetype)
entry_name.delete(0, END)
entry_name.insert(0, File_path)
templ_filename = StringVar()
templ_entry = Entry(app, textvariable = templ_filename, width = 30)
templ_entry.grid(row = 3, column = 1, sticky=W)
filetype_fasta = [('fasta files', '*.fasta'), ('All files', '*.*')]
button_templ = Button(app, text = 'Browse', width =6, command = lambda:browse_for_file(templ_entry, filetype_fasta))
button_templ.grid(row = 3, column = 2)
app.mainloop()
Run Code Online (Sandbox Code Playgroud) 是否可以将自定义命令行参数传递给snakemake脚本?我已经尝试过,但是执行 Snakefile 会导致argparseerror snakemake: error: unrecognized arguments: -zz。下面是一个示例脚本。
import argparse
def get_args():
parser = argparse.ArgumentParser(description='Compares Illumina and 10x VCFs using RTG vcfeval')
# required main arguments
parser.add_argument('-zz', metavar='--filename', dest='fn', help='Filename', required=True)
# parse arguments
args = parser.parse_args()
fn = args.fn
return fn
fn = get_args()
rule test_1:
input:
fn + "/example.txt"
shell:
"echo Using file {input}"
Run Code Online (Sandbox Code Playgroud)