Считать значение из файла с Python - PullRequest
0 голосов
/ 25 июня 2019

Содержимое моего файла:

NAME="A"
VERSION="20190515231057-816a"
VERSION_ID="2.0"
BUILD_ID="16a438d965923ab62804cea4ba00"
BUILDER_NAME="v1.0"
BUILDER_VERSION="v1.0"

Мне нужно прочитать любое значение данных, например, BUILDER_VERSION - это значение (v1.0).Я попробовал следующий код, однако он выдает ошибку из-за специальных символов.Как я могу решить проблему или предложить другие команды?

build_value = subprocess.check_output("sed -ne 's/BUILDER_VERSION=\([^]*\).*/\1/p' < /etc/os-release", shell=True)

Ответы [ 4 ]

0 голосов
/ 25 июня 2019

Я изменил команду sed -n 's/^BUILDER_VERSION*= *//p' < /etc/os-release.Сейчас нормально работает.Также я добавил .replace ('"', '') в конец команды подпроцесса для v1.0. Спасибо всем.

0 голосов
/ 25 июня 2019

Вы можете попробовать что-то вроде:

with open(FILE_NAME, 'r') as file:
    parsed = file.read().split('\n')
    for item in parsed:
        if VAR_NAME in item:
            print(item)

Это напечатало бы всю строку файла, содержащего имя переменной. Вы также можете сохранить строку в виде строкового литерала и разбить ее дальше с помощью нарезки, разбиения, регулярных выражений и т. Д.

Я уверен, что есть более чистые способы сделать это, поэтому я бы проверил некоторую документацию Python по чтению файлов!

0 голосов
/ 25 июня 2019

Замените команду sed следующим:

sed -n 's/^BUILDER_VERSION*= *//p' < /etc/os-release

Вы можете заменить BUILDER_VERSION на требуемый шаблон

0 голосов
/ 25 июня 2019

В Python вы можете избежать использования подпроцесса для такого простого случая.Вы можете прочитать файл напрямую с помощью open () или принять «стандартный ввод» из sys.stdin (вам нужно будет импортировать sys до этого).

import sys
for line in sys.stdin:
    if line.startswith('BUILDER_VERSION='):
          value = line.split('=', 1)
          print(value[1] if value or 'No version')
          break
 else:
      print('version is not found')

вы можете использовать его аналогично sed: cat /etc/os-release|python this_script.py

Если вы хотите извлечь число, вы можете использовать такое же регулярное выражение:

import re
version_extractor = re.compile(r'BUILDER_VERSION=([^^]*)')

with open('/etc/os-release', 'r') as file:
   for line in file:
       match = version_extractor.match(line)
       if match:
           print(match.groups()[0])
...