2017-03-22 20 views
2

は例えば、私はPythonスクリプトsnakemake.pyありますsnakemakeの `run`ブロックをリセットします。

from snakemake import snakemake 

cfg={'a':'aaaa', 'b':'bbbb', 'c': 'cccc'} 
snakemake(
     'Snakefile', 
     targets=['all'], 
     printshellcmds=True, 
     forceall=True, 
     config=cfg, 
     # configfile=config, 
     keep_target_files=True, 
     keep_logger=False) 

Snakefileを次のようになります。私はpython snakemake.pyを実行すると

print(config) 
print('------------------------------------------------------------------------------------------') 
rule a: 
    output: 
     'a.out' 
    shell: 
     "echo %s ; " 
     "touch {output[0]}" % config['a'] 
rule b: 
    output: 
     'b.out' 
    shell: 
     "echo %s ; touch {output[0]}" % config['b'] 
rule c: 
    output: 
     'c.out' 
    run: 
     print(config['c']) 
     import os 
     os.system('touch ' + output[0]) 

rule all: 
    input: 
     'a.out', 'b.out', 'c.out' 

、私はエラーに会った:

{'a': 'aaaa', 'c': 'cccc', 'b': 'bbbb'} 
------------------------------------------------------------------------------------------ 
Provided cores: 1 
Rules claiming more threads will be scaled down. 
Job counts: 
     count jobs 
     1  a 
     1  all 
     1  b 
     1  c 
     4 

rule c: 
    output: c.out 
    jobid: 1 

{} 
------------------------------------------------------------------------------------------ 
KeyError in line 8 of /Users/zech/Desktop/snakemake/Snakefile: 
'a' 
    File "/Users/zech/Desktop/snakemake/Snakefile", line 8, in <module> 
Will exit after finishing currently running jobs. 
Exiting because a job execution failed. Look above for error message 

私が削除した場合c.outからrule allまでは、完全に正常に動作します。それはrunのブロックがリセットされたconfigのブロックをsnakemakeに渡して空にするように設定されているようです。それは奇妙な行動ではありませんか?回避策はありますか?

最新のOSXでsnackemakeバージョン3.11.2(anacondaのbiocondaチャンネルからインストール)を使用しています。

注: snakemakeコマンドラインsnakemake -p --keep-target-files all --config a="aaaa" b="bbb" c="cccc"を実行すると正常に動作します。したがって、これはAPIの問題のように見えます。

+0

はSnakemakeコマンドラインクライアントが、APIを使用しないように、特定の理由はありますか? –

+0

@JohannesKöster、私は独自のパッケージの中でsnakemakeを呼びたいので、コマンドを実行する代わりにAPIを使う方が良いです。 – RNA

+0

bitbucketで問題を提出できますか?私はバグだと思う。 –

答えて

0

現在のSnakemakeのバージョンは何ですか?

私はsnakemake/3.11.2を使用していますが、あなたのスクリプトに問題はありません。

しかし、それぞれのルールののパラメータセクションがconfiguration parametersを呼び出す正しい方法であることを知る必要があります。

スクリプトでは、それは次のようにする必要があります:

rule a: 
    params: 
     name = config['a'] 
    output: 
     'a.out' 
    shell: 
     "echo {params.name} ; " 
     "touch {output}" 
rule b: 
    params: 
     name = config['b'] 
    output: 
     'b.out' 
    shell: 
     "echo {params.name} ;" 
     "touch {output}" 

rule c: 
    params: 
     name = config['c'] 
    output: 
     'c.out' 
    run: 
     print(params.name) 
     import os 
     os.system('touch ' + output[0]) 
+0

私はバージョン3.11.0を使用していましたが、3.11.2にアップデートしても問題は解決しません。どのようにsnakemakeをインストールしましたか?それはおそらくコンドミニアムのためでしょうか? – RNA

+0

snakemakeコマンドラインまたはAPIをPythonスクリプトを使って実行しましたか?コマンドラインは正常に動作しますが、APIは動作しません。 – RNA

+0

Ohh ok ok!私はコマンドラインでsnakemakeを実行します。だから私はあなたのpythonスクリプトを試して、あなたが言ったようにエラーが発生します。 os.system()でsnakemakeを起動すると問題が解決するはずです。 –

関連する問題