Может ли Meson читать содержимое файла

Может ли Meson считывать содержимое файла в массив или строку? С здесь строку можно разбить на массив, и массив можно перебрать с помощью foreach, но я не смог найти способ получить данные из файла для начала.


person Pentarctagon    schedule 08.11.2017    source источник


Ответы (3)


Не прямо нет, вы можете использовать run_command(), чтобы получить его из другого инструмента / скрипта.

person TingPing    schedule 11.11.2017

Чтобы завершить ответ @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()
person Salamandar    schedule 28.11.2017
comment
Это работает кросс-платформенный? (Поскольку мезон написан на python, я полагаю, вы могли бы использовать модуль python для вызова сценария python вместо этого…) - person Caesar; 05.05.2020
comment
@Caesar Нет, это не так. Например, cat не обязательно доступен в Windows. - person ManuelAtWork; 14.06.2021
comment
Для большей переносимости вы можете вместо этого использовать python. Редактирую ответ на это. - person Salamandar; 16.06.2021

Обновлять

Начиная с версии Meson 0.57.0, вы можете использовать функцию read модуля файловой системы:

fs = import('fs') 
...

my_list = fs.read('list.txt').strip().split('\n')

foreach item : my_list
  # Do something
endforeach
person ManuelAtWork    schedule 14.06.2021