Python: присвоение переменной второго значения из строки вывода. - PullRequest
0 голосов
/ 01 августа 2020

У меня есть следующие строки python code

import subprocess
buckets = open('permissions.txt', 'r')
for x in buckets:
   get_version = ['gsutil', 'versioning', 'get', x]
   get_version = subprocess.check_output(get_version)
   print (get_version)
   if get_version == "Enabled":
       print "Versioning already enabled on" (x)
   else:
       version_on = ['gsutil', 'versioning', 'set', 'on', x]
    

Результат print из строки 6 print (get_version) выглядит следующим образом:

   gs://xxxxxxx.appspot.com: Enabled
   gs://xxxxxxxx_cloudbuild: Enabled

Я хочу только второе значение, которое будет присвоено переменной get_version из вышеприведенного вывода, которое равно Enabled, чтобы его можно было сравнить с оператором if в следующей строке code

Я пробовал с ниже кода, но я думаю, что он работает только со значениями, разделенными запятыми

  get_version = subprocess.check_output(get_version)[1]

Есть предложения?

1 Ответ

1 голос
/ 01 августа 2020

Я хочу, чтобы переменной get_version было присвоено только второе значение из приведенного выше вывода, который включен

Согласно документации для check_output():

subprocess.check_output (args, *, stdin = None, stderr = None, shell = False, universal_newlines = False)

Выполнить команду с аргументами и вернуть ее вывод в виде байта строка.

Возвращаемое значение - это одна строка, поэтому «второго значения» нет. Вам нужно проанализировать строку, чтобы получить нужные символы.

Я пробовал использовать приведенный ниже код, но я думаю, что он работает только со значениями, разделенными запятыми

get_version = subprocess.check_output(get_version)[1]

Хорошая попытка. Однако он дает второй символ в строке, что вам не нужно. Вместо этого вам нужно проделать еще немного работы. В этом случае вам понадобится функция split() для анализа «слов» из вашей строки:

results = get_version.split()

Теперь вы можете проиндексировать results:

print(results[1])

Предлагаю вам ознакомьтесь с стандартными строковыми методами , чтобы знать, какие инструменты доступны, когда они вам понадобятся.

Незапрошенный совет:

Посмотрите на этот код на мгновение:

   get_version = ['gsutil', 'versioning', 'get', x]
   get_version = subprocess.check_output(get_version)

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

   command = ['gsutil', 'versioning', 'get', x]
   output = subprocess.check_output(command)

Тогда мое решение будет выглядеть следующим образом:

results = output.split()
print(results[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...