【问题标题】:Can Meson read the contents of a file介子可以读取文件的内容吗
【发布时间】:2017-11-08 08:27:47
【问题描述】:

介子是否可以将文件的内容读入数组或字符串?从here 可以将一个字符串拆分为一个数组,并且可以用foreach 循环一个数组,但是我一直无法找到从文件中获取数据的方法。

【问题讨论】:

    标签: meson-build


    【解决方案1】:

    更新

    从Meson 0.57.0开始,可以使用Filesystem模块的read函数:

    fs = import('fs') 
    ...
    
    my_list = fs.read('list.txt').strip().split('\n')
    
    foreach item : my_list
      # Do something
    endforeach
    

    【讨论】:

      【解决方案2】:

      为了完成@TingPing 的回答,我通常会这样做:

        files = run_command(
          'cat', files('thefile.txt'),
        ).stdout().strip()
      

      该方法也可以用于:

        images = run_command('find',
          meson.current_source_dir(),
          '-type', 'f',
          '-name', '*.png',
          '-printf', '%f\n'
        ).stdout().strip().split('\n')
      

      不要忘记,使用 Meson 的文件引用可能有点不精确,因此您需要使用其中之一:

      • files('thefilename')
      • join_paths(meson.source_root(), meson.current_source_dir(), 'thefilename')

      编辑:对于更交叉兼容的解决方案,您可以使用 python 而不是 cat

      files = run_command('python', '-c',
          '[print(line, end="") for line in open("@0@")]'.format(myfile)
      ).stdout().strip()
      

      【讨论】:

      • 这可以跨平台工作吗? (由于介子是用python编写的,我想你可以使用python模块来调用python脚本……)
      • @Caesar 不,它没有。例如,cat 在 Windows 中不一定可用。
      • 为了更便携,你可以使用 python 代替。我正在为此编辑答案。
      • 我认为应该使用@0@ 而不是{0} 作为命令字符串中的替换模式
      • 是的,我错了。
      【解决方案3】:

      不是直接不行,你可以使用run_command()从另一个工具/脚本中获取它。

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2017-07-11
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多