在输入指令中使用 '~' (A.K.A.tilde) 似乎不起作用?
Using '~' (A.K.A. tilde) in input directive does not seem to work?
这是我第一次尝试在输入中使用“~”。
当我将“~”转换为绝对路径时它起作用了。
证明它们是同一个文件:
(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}”。
您可以尝试将路径包装在 os.path.expanduser
中(在您的 snakefile 中 import os
之后可用):
On Unix and Windows, return the argument with an initial component of ~
or ~user
replaced by that user‘s home directory.
(引自文档:https://docs.python.org/3/library/os.path.html#os.path.expanduser)
我要结束这个问题。
我最终接受了@alvits 的建议。
我选择它是因为它代表波浪号,所以以非引用形式提供它是有意义的。
expanduser wrapping,虽然有可能,但对于所需的东西来说是多余的。
谢谢大家的帮助!
2017/06/09 - 编辑:不要在 Snakemake 输入中使用“~”或“${HOME}”。
看到 Johannes Köster 的评论后,我仔细检查了我所做的,但我无法重现它。
对于造成的混乱,我深表歉意。非常感谢您发现这个错误 J.K.
我不确定我之前设置了什么。我最终改变了文件的使用方式,即使使用 git,我也无法重现它。
这是我第一次尝试在输入中使用“~”。 当我将“~”转换为绝对路径时它起作用了。
证明它们是同一个文件:
(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}”。
您可以尝试将路径包装在 os.path.expanduser
中(在您的 snakefile 中 import os
之后可用):
On Unix and Windows, return the argument with an initial component of
~
or~user
replaced by that user‘s home directory.
(引自文档:https://docs.python.org/3/library/os.path.html#os.path.expanduser)
我要结束这个问题。
我最终接受了@alvits 的建议。
我选择它是因为它代表波浪号,所以以非引用形式提供它是有意义的。
expanduser wrapping,虽然有可能,但对于所需的东西来说是多余的。
谢谢大家的帮助!
2017/06/09 - 编辑:不要在 Snakemake 输入中使用“~”或“${HOME}”。
看到 Johannes Köster 的评论后,我仔细检查了我所做的,但我无法重现它。
对于造成的混乱,我深表歉意。非常感谢您发现这个错误 J.K.
我不确定我之前设置了什么。我最终改变了文件的使用方式,即使使用 git,我也无法重现它。