0

这是我第一次尝试在输入中使用“~”。当我将“~”转换为绝对路径时它可以工作。

证明它们是同一个文件:

(CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls ~/share/references/rRNA.ensg72.hg19.interval_list
-rw-rw-r-- 1 fcchan users 24K Dec 12  2013 /home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list

(CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls /genesis/extscratch/clc/references/rRNA.ensg72.hg19.interval_list
-rw-rw-r-- 1 fcchan users 24K Dec 12  2013 /genesis/extscratch/clc/references/rRNA.ensg72.hg19.interval_list

(CentOS5-Compatible) [tboyarski@login2 6-bamMetrics]$ ls /home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list
-rw-rw-r-- 1 fcchan users 24K Dec 12  2013 /home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list

不起作用:

rule intervalList:
    input:
       "~/share/references/rRNA.ensg72.hg19.interval_list"

作品:

rule intervalList:
    input:
       "/home/tboyarski/share/references/rRNA.ensg72.hg19.interval_list"

我目前只尝试在输入指令中使用它。我可能会花点时间看看它是否可以作为输出指令(不是我需要的,只是好奇)。

想法?

编辑

@alvits 能够指出 ~ 在评估之前由 shell 转换为 ${HOME} 。似乎在向snakemake 提供〜时,不会发生这种转换。简单的替代方法是始终使用 ${HOME},它适用于 MacOSX 和 Linux :)。

我能够成功使用以下内容:

rule intervalList:
    input:
       "${HOME}/share/references/rRNA.ensg72.hg19.interval_list"

第二次编辑

用户指出我认为的解决方案实际上不是。解决方案是不要在输入指令中使用“~”或“${HOME}”。

4

2 回答 2

0

您可以尝试将路径包装在os.path.expanduserimport os在您的蛇文件之后可用):

在 Unix 和 Windows 上,返回带有该用户主目录的初始组件~~user替换为该用户主目录的参数。

(引自文档:https ://docs.python.org/3/library/os.path.html#os.path.expanduser )

于 2017-06-08T12:25:20.023 回答
0

我要结束这个问题。

我最终接受了@alvits 的建议。

我之所以选择它,是因为这就是波浪号所代表的含义,因此以非引用形式提供它是有意义的。

expanduser 包装虽然是一种可能性,但对于所需的东西来说太过分了。

谢谢你们每一个人的帮助!

2017/06/09 - 编辑:不要在 Snakemake 输入中使用“~”或“${HOME}”。

在看到 Johannes Köster 的评论后,我仔细检查了我所做的事情,但我无法重现它。

我很抱歉造成混乱。非常感谢您发现此错误 JK

我不确定我之前设置了什么。我最终改变了文件的使用方式,即使使用 git,我也无法重现它。

于 2017-06-08T22:50:04.333 回答