1

ソフトウェアのバージョンが最新かどうかを検出しようとしていますが、Python 3.3 で次のコードを使用してこれを行っています。

if str(version) in str(buildno):
    print("Your software version is up to date. \n")
else:
    print("Your software is out of date. Updating your software. \n")

ただし、ソフトウェアが最新の場合でも、ソフトウェアを更新し続けます。コードのバリエーションも試しました:

if str(version) in str(buildno) == True:
    print("Your software version is up to date. \n")
else:
    print("Your software is out of date. Updating your software. \n")
    if os == "Windows":
        subprocess.call("windowsUpgrade.sh", shell=True)

これも機能しません。私が使用している方法は実行可能ですか、それともこの問題に対して別のアプローチを取る必要がありますか?

>>> print(version)
4.3.0-18107
>>> print(buildno)
('4.3.0-18107', 1)

提供された回答に感謝します。

4

4 に答える 4

1

ここで使用されるデータ型について混乱があるようです

タプルから文字列へ:

str(('4.3.0-18107', 1)) = "('4.3.0-18107', 1)"

文字列にないタプル:

if "('4.3.0-18107', 1)" in '4.3.0-18107' # False

タプルの文字列

if '4.3.0-18107' in "('4.3.0-18107', 1)" # True 

文字列入力 (最初のインデックスのタプル = 文字列)

if '4.3.0-18107' in ('4.3.0-18107', 1)[0] # True

順序が重要でない場合は、文字列に変換する前にタプル str(('4.3.0-18107', 1)[0]) にインデックスを付ける必要があります。上記のコードで行ったことは、タプルをバージョンではなく文字列に変換したことです。したがって、Pavel Anossov は、スワップがここで機能するはずであるという点で正しかった - 少なくとも私にとっては機能する。

したがって、これは最終的に機能しました(空白が失われました):

buildno=buildno[0] 
version=str(version.strip()) 
buildno=str(buildno.strip()) 
if version == buildno

またはそれより短い:

if str(version).strip() == str(buildno[0]).strip():
if str(version).strip() in str(buildno[0]).strip():
于 2013-02-28T13:35:18.160 に答える
1

Python 3 を使用しているため、 PEP386distutils.versionで説明されている比較モジュールを使用できます。

from distutils.version import LooseVersion as V

minimum_version = V(version)
current_version = V(buildno)

if current_version >= minimum_version:
    print("Your software version is up to date. \n")
else:
    print("Your software is out of date. Updating your software. \n")

クラスもありStrictVersionますが、バージョン番号では機能しないようです。

于 2013-02-28T13:36:23.747 に答える
1

あなたbuildnoはタプルです。最初のアイテムのみが必要です。あれは:

if str(buildno[0]) in str(version):

あるいは:

if str(buildno[0]) == str(version):

Pavel Anossov がコメントで提案したように。

補足として、2番目のアプローチ:

if str(buildno) in str(version) == True:

disを次のように使用して大まかに翻訳できます。

if str(buildno) in str(version) and str(version) == True:

また、質問に対する DSM のコメントもご覧ください。

「4.3.0-1」は「4.3.0-11」にありますが、おそらく最新ではありません。バージョンの番号付け方法によっては、int のタプルを作成して比較したい場合があります。

于 2013-02-28T13:25:24.127 に答える
1

2 番目のバリエーションは機能しません。buildnoと を交換すると、最初のバリエーションが機能するはずですversion

buildno = '4.3.0-18107'
version = ('4.3.0-18107', 1)

if str(buildno) in str(version):
    print("Your software version is up to date. \n")

1 つは文字列で、もう 1 つはタプルだと思いますが、どのように取得したかではなく、印刷されたものを見ただけなので、それらは何でもかまいません。

それらの内容から判断すると、これらの変数名は多少誤解を招くものであり、交換されているかどうかにかかわらずです。

于 2013-02-28T13:11:20.707 に答える