首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我访问分阶段文件上的‘`isEmpty()’时,为什么要获得一个`java.nio.file.ProviderMismatchException`?

当我访问分阶段文件上的‘`isEmpty()’时,为什么要获得一个`java.nio.file.ProviderMismatchException`?
EN

Stack Overflow用户
提问于 2022-01-20 15:51:52
回答 1查看 101关注 0票数 1

当我运行以下脚本时,我得到了一个java.nio.file.ProviderMismatchException

代码语言:javascript
运行
复制
process a {
    output:
        file _biosample_id optional true into biosample_id

    script:
    """
    touch _biosample_id
    """
}

process b {
    input:
        file _biosample_id from biosample_id.ifEmpty{file("_biosample_id")}

    script:
    def biosample_id_option = _biosample_id.isEmpty() ? '' : "--biosample_id \$(cat _biosample_id)"
    """
    echo \$(cat ${_biosample_id})
    """
}

我使用的是稍微修改过的可选输入模式。

对我为什么要得到java.nio.file.ProviderMismatchException有什么想法吗

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-21 01:47:10

脚本块中,_biosample_id实际上是nextflow.processor.TaskPath类的一个实例。因此,要检查文件(或目录)是否为空,只需调用它的.empty()方法即可。例如:

代码语言:javascript
运行
复制
script:
def biosample_id_option = _biosample_id.empty() ? '' : "--biosample_id \$(< _biosample_id)"

我喜欢你的解决方案-我觉得很好。我认为它应该是健壮的(但我还没有测试它)。建议的可选输入模式在尝试将丢失的输入文件逐步放置到远程文件系统/对象存储区时将失败。但是有一个解决方案,它将一个空文件保存在您的$baseDir中,并在脚本中指向它。例如:

代码语言:javascript
运行
复制
params.inputs = 'prots/*{1,2,3}.fa'
params.filter = "${baseDir}/assets/null/NO_FILE"

prots_ch = Channel.fromPath(params.inputs)
opt_file = file(params.filter)

process foo {
  input:
  file seq from prots_ch
  file opt from opt_file

  script:
  def filter = opt.name != 'NO_FILE' ? "--filter $opt" : ''
  """
  your_commad --input $seq $filter
  """
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70789318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档