Python:出力の行から2番目の値を変数に割り当てる

2020-08-01 python list

私は次のpythonコード行を持っています

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]
    

6行目のprintの出力print (get_version)は次のとおりです。

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

上記の出力の変数get_version 2番目の値のみを割り当ててEnabledcode次の行のifステートメントと比較できるようにしcode

以下のコードで試しましたが、カンマ区切りの値でのみ機能すると思います

  get_version = subprocess.check_output(get_version)[1]

助言がありますか ?

Answers

有効になっている上記の出力から変数get_versionに2番目の値のみを割り当てたい

check_output()ドキュメントによると:

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

引数を指定してコマンドを実行し、その出力をバイト文字列として返します。

戻り値は単一の文字列であるため、「2番目の値」はありません。文字列を解析して、必要な文字を取得する必要があります。

以下のコードで試しましたが、カンマ区切りの値でのみ機能すると思います

get_version = subprocess.check_output(get_version)[1]

これはまともな試みです。ただし、これは文字列の2番目の文字を提供しますが、これは必要なことではありません。代わりに、もう少し作業を行う必要があります。この場合、文字列から「単語」を解析するには、 split()関数が必要です。

results = get_version.split()

これでresultsインデックスresults付けることができます:

print(results[1])

標準の文字列メソッドに慣れることをお勧めします。これにより、必要なときに使用できるツールがわかります。

求められていないアドバイス:

このコードを少し見てください。

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

ここでは、同じ変数を再利用して別のことを意味しています。一般的に、後でこのコードに戻ったときに混乱する可能性があるため、これは良いアイデアではありません。それぞれが何であるかを正確に表す2つの個別の名前を考え出すことをお勧めします。

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

それから私の上の解決策は次のようになります:

results = output.split()
print(results[1])

Related